128以上的整数Integer==不一样的原因
Topic source主要是工厂模式创建对象
点进源码
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
默认 low = -127
high = 128
- 1
是的201610
因为Integer本身会缓存[-128,127]的整数,所以当你值在这个范围内时,就会直接取出Integer,不会new一个新的Integer,因此==为true, 而当数超过这个范围时,就会new一个新的Integer,不同的Integer对象,因此==为false。
这时java本身的优化机制导致的,为了提高效率缓存了这个范围的整数.