Integer i1 = 100; // Integer.valueOf(100)
Integer i2 = 100;
if ( i1 == i2) return true;
return false; // return true
Integer i1 = 200; // Integer.valueOf(200)
Integer i2 = 200;
if ( i1 == i2) return true;
return false; // return false
为什么会出现这种情况呢?
看一下Integer的源码就清楚了
public static Integer valueOf(int i) {
//IntegerCache.low = -127, IntegerCache.high = 128
if ( i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[ i + (-IntegerCache.low) ];
return new Integer(i);
}
所以在进行拆箱的时候,当 i = 200 时,分别新建了对象,所以 i1和i2比较会返回false