關於一個自動裝箱、拆箱的例子
阿新 • • 發佈:2018-12-21
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