参考以下代码:
public static void main (String[] args) {
Map<Number, String> map = new HashMap<Number, String>();
map.put(1L, "test");
System.out.println(map.get(1));
}
为什么 HashMap.get 返回 null?O_o 它必须为 hashCode 函数返回 1 的任何对象返回值,不是吗?
更新
问题是 Map 接口接收对象,而不是参数化类型。所以我原以为任何对象都可以是key,但是HashMap实现用equals检查类型,这让我很吃惊。
自动装箱不是问题。我知道,那个 1 变成了 Integer,而 1L 变成了 Long。但是它们具有相同的哈希码。所以我认为任何实现 Map#get 都应该为具有相同哈希码的任何对象返回值。