package integerdemo; public class IntegerDemo { public static void main(String[] args) { //-128--127之間 Integer i1 = 100; Integer i2 = 100; if( i1 == i2){ System.out.println("i1 == i2"); }else{ System.out.println("i1 != i2 "); } //大於127 Integer i3 = 200; Integer i4 = 200; if( i3 == i4){ System.out.println("i3 == i4"); }else{ System.out.println("i3 != i4 "); } } }
運行結果:
i1 == i2 i3 != i4
以上是靠整型數的自動拆裝箱實現的,而兩者的結果卻不相同。
原因在於,在進行自動拆裝箱時,編譯器會使用Integer.valueof()來創建Integer實例。
2、以下是Integer.valueof()的源代碼:
public static Integer valueOf(int i) { assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
簡單地解釋這段代碼,就是如果傳入的int在IntegerCache.low和IntegerCache.high之間,那就嘗試看前面的緩存中有沒有打過包的相同的值,如果有就直接返回,否則就創建一個Integer實例。IntegerCache.low 默認是-128;IntegerCache.high默認是127.
注:如果要比較兩個對象的內容是否相同,盡量不使用== 或者!= 來比較,可以使用equal()來實現。