此问题是由strange HashMap.put() behaviourLong.valueOf(0).equals(Integer.valueOf(0))为什么是false?
促使我想我明白为什么Map<K,V>.put
需要K
但Map<K,V>.get
需要一个Object
,似乎不这样做会打破太多现有的代码。
现在我们进入一个非常容易出错的情景:
java.util.HashMap<Long, String> m = new java.util.HashMap<Long, String>();
m.put(5L,"Five"); // compiler barfs on m.put(5, "Five")
m.contains(5); // no complains from compiler, but returns false
无法这一已被如果Long
值withing int
范围和值相等返回true解决了吗?
也许我不清楚。我知道为什么它会像源代码那样发生,我在发布前阅读过代码。我的问题是为什么它决定应该这样? – 2009-01-15 08:53:19
http://stackoverflow.com/questions/445990/why-is-long-valueof0-equalsinteger-valueof0-false#446911更正确地解释它。由于将Long与Integer比较可能会违反对称性。 – 2009-01-15 20:44:04