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 ?
我无法弄清楚价值如何影响比较结果。
答案 0 :(得分:8)
因为Integer
类型实习生值(由静态类IntegerCache
)从-128到127.
答案 1 :(得分:3)
因为Integer类在内部使用IntegerCache
来缓存从-128
到127
的对象。对于例如当您调用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