请考虑以下代码:
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?它不是应该为任何hashCode函数返回1的对象返回值吗?
更新:
问题在于Map接口接收Object,而不是参数化类型。所以我期望任何对象都可以成为键,但HashMap实现使用equals检查类型,这让我感到惊讶。
自动装箱不是问题。我知道1变成了Integer,1L变成了Long。但它们具有相同的哈希码。所以我认为任何Map#get实现都应该为具有相同哈希码的任何对象返回值。
System.out.println(map.get(1L));
。 - Alexis C..equals
操作,它会返回false。 - Joop Eggen