此問題是由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