关于一个自动装箱、拆箱的例子

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

猜你喜欢

转载自blog.csdn.net/ifidieyoung/article/details/81911790