int和Integer的區別


int和Integer的區別

int和Integer的基本區別

  1. int是基本數據類型,Integer是int包裝類。
  2. Integer變量必須實例化后才能使用,int可以直接使用
  3. Integer的默認值是null,int默認值是0
  4. Integer變量實際上是對象的引用,指向new的Integer對象,int是直接存儲數據

Integer的自動裝箱

一般我們生成對象都是Object o = new Objectz(),但是對於Integer,我們可以Integer a = 10;
因為Integer的自動裝箱功能。
通過反編譯工具我們可以看到class文件下是
Integer a = Integer.valueOf(10);
這就是基本數據類型的裝箱。

Integer的自動拆箱

int b = a;反編譯生成的class文件是int b = a.intVlaue();

深入對比

        Integer a = new Integer(10);
        Integer b = new Integer(10);
        System.out.println(a == b);
        System.out.println(a.equals(b));

結果前false,后true。
因為Integer變量是對Integer對象的引用,new了兩個對象,顯然內存地址不一樣,引用不一樣。
而Integer重寫了equals方法,數值一樣就返回true。

    public static void main(String[] args) {
        Integer a = 10;
        Integer b = 10;
        System.out.println(a == b);
        Integer c = 128;
        Integer d = 128;
        System.out.println(c == d);
    }

結果前true,后false
因為Integer自動裝箱時對數值在-128到127的對象放入緩存中,第二次就直接取緩存中的數據而不會new。

    public static void main(String[] args) {
        Integer a = new Integer(10);
        int b = 10;
        System.out.println(a == b);
    }

結果為true
因為Integer類型和int比較時,會自動拆箱,化為基本類型數據比較。

觸發自動拆箱

算術運算會觸發自動拆箱


免責聲明!

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



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