Java:地图值比较无法与较高的值进行比较。为什么?

时间:2019-09-20 04:26:22

标签: java collections hashmap

为什么我只收到消息“值相同”作为输出?是由于一些自动装箱吗?

代码:

 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");
    }

1 个答案:

答案 0 :(得分:3)

Integer是对象类型,因此要比较它们,应使用Integer::equals。对于范围为[-128,127]的Integer,有一个特殊的整数池。当您在地图中put的{​​{1}}值被装箱到int时,因此Integer之间的地图中的相同值将引用{ {1}}个池。这就是[-128 , 127]值的Integer返回true的原因。但是通常,您应该在此处使用==或明确地进行拆箱。