Integer比較值的時候小心使用


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM