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()來實現。
