怎么可能127 == 127而128!= 128?

时间:2015-01-13 12:28:39

标签: java

Integer v1_1 = 127;
Integer v1_2 = 127;

Integer v2_1 = 128;
Integer v2_2 = 128;

System.out.println(v1_1 == v1_2);//true
System.out.println(v2_1 == v2_2);//false

为什么第二个表达式是 false

我无法弄清楚价值如何影响比较结果。

2 个答案:

答案 0 :(得分:8)

因为Integer类型实习生值(由静态类IntegerCache)从-128到127.

答案 1 :(得分:3)

因为Integer类在内部使用IntegerCache来缓存从-128127的对象。对于例如当您调用valueOf时,Integer类会检查值是否在缓存中,而不是像

那样
   public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

如果缓存中存在该值,则会获得相同的对象。这就是为什么

System.out.println(v1_1 == v1_2);//returns true