Discuss / Java / 128以上的整数Integer==不一样的原因

128以上的整数Integer==不一样的原因

Topic source

是的201610

#1 Created at ... [Delete] [Delete and Lock User]

因为Integer本身会缓存[-128,127]的整数,所以当你值在这个范围内时,就会直接取出Integer,不会new一个新的Integer,因此==为true, 而当数超过这个范围时,就会new一个新的Integer,不同的Integer对象,因此==为false。

这时java本身的优化机制导致的,为了提高效率缓存了这个范围的整数.

🌙

#2 Created at ... [Delete] [Delete and Lock User]

主要是工厂模式创建对象

点进源码

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

Reply