问题:Integer a1 = 127; Integer b1 = 127; a1 == b1,为true
Integer b1 = 127; b1指向缓存中127地址。
Integer b1 = 127;Java在编译时,被翻译成 Integer v1 = Integer.valueOf(127);
Integer.valueOf的源码:
public static Integer valueOf(int i){
assert IntegerCache.high >= 127;
if(i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
看了源码明白,对于 -128到127 之间的数,会进行缓存,Integer b1 = 127时,会将127进行缓存,下次再写Integer i6 = 127时,就会直接从缓存中取,不会new了。