这是一个代码片段:
public static void main(String[] args) {
final byte key = 0;
Map<Integer, Integer> test = new HashMap<>();
test.put(0, 10);
System.out.println(test.containsKey(key));
}
我在控制台上打印了
false
。只有当我将 key
投射到 int
时,我才会得到真实,就像这样
System.out.println(test.containsKey((int)key));
有人可以解释一下这是怎么回事吗?
put
将 Integer
作为键,因此 byte
被装箱为 Integer
。
containsKey
需要一个Object
(另见),所以byte
被装箱为Byte
。这个 Byte
与放入地图中的 equals
不同,因为它们是完全不同的类,所以 Integer
返回 false。