java中Integer與int裝箱拆箱一點收獲


 示例代碼:

 

class BoxIntInteger {

    public static void main(String[] args) {

        Integer a = new Integer(10111);
        int b = 10111;
        boolean equal1 = a == b;
        boolean equal2 = a.equals(b);
        System.out.println(equal1);
        System.out.println(equal2);
    }
}

  

反編譯字節碼:

 

    public static void main(String args[])
    {
        Integer a = new Integer(10111);
        int b = 10111;
        boolean equal1 = a.intValue() == b;   
        boolean equal2 = a.equals(Integer.valueOf(b));
        System.out.println(equal1);
        System.out.println(equal2);         
    }

  

1:可以看出對於Integer與int使用==比較大小的話,優先Integer拆箱。

2: 如果使用equals比較大小的話,則int裝箱。

 

提示:對於Integer與int之間大小比較優先使用equals比較,否則容易出現空指針,例如:

      Integer c= null;
      System.out.println(c==1);

  原因:由於Integer需要調用intValue進行拆箱,因而空指針。

Integer與Integer必須使用equals方法比較,這個就不必解釋了。但是通常我們可以看先Integer與Integer之間使用==也可以正確比較,原因是:Integer對於-128到127之間的數字在緩存中拿,不是創建新對象。

緩存獲取數據源碼:java.lang.Integer#valueOf(int)

    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

 更多關於緩存細節參考:java.lang.Integer.IntegerCache

 


免責聲明!

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



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