为什么我只收到消息“值相同”作为输出?是由于一些自动装箱吗?
代码:
Map<Character, Integer> pMap = new HashMap<>();
Map<Character, Integer> sMap = new HashMap<>();
char c = 'a';
pMap.put(c, 10);
sMap.put(c, 10);
if (sMap.get(c) == pMap.get(c)) {
System.out.println(c + " value is same");
}
char d = 'b';
pMap.put(d, 10000);
sMap.put(d, 10000);
if (sMap.get(d) == pMap.get(d)) {
System.out.println(d + " value is same");
}
答案 0 :(得分:3)
Integer
是对象类型,因此要比较它们,应使用Integer::equals
。对于范围为[-128,127]的Integer
,有一个特殊的整数池。当您在地图中put
的{{1}}值被装箱到int
时,因此Integer
之间的地图中的相同值将引用{ {1}}个池。这就是[-128 , 127]
值的Integer
返回true的原因。但是通常,您应该在此处使用==
或明确地进行拆箱。