编译后其实是这样
Integer i = Integer.valueOf(129);
Integer j = Integer.valueOf(129);
jdk源码,方法如下。
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之间的整数,其余的他会new。new的话两个对象的地址肯定是不一样的,也就是不相等了