Java——Java自動裝箱和拆箱


一、什么是自動裝箱和拆箱:

我們知道java為8種基本類型分別提供了對應的包裝類型,在Java SE5之前,如果要生成一個數值為10的Integer對象,必須這樣進行:

Integer i=new Integer(10);

  

而在從Java SE5開始就提供了自動裝箱的特性,如果要生成一個數值為10的Integer對象,只需要這樣就可以了:

Integer i=10;

  

這個過程會自動根據數值的類型創建Integer對象,則就是自動裝箱,同理

Integer i=10;
int j=i;

  

上面的代碼則是自動拆箱,將Integer對象自動拆箱為int

簡單來說裝箱就是自動將基本數據類型轉換為包裝器類型,拆箱就是自動將包裝器類型轉化為基本類型

 

二、裝箱和拆箱是如何實現的:

如下代碼:

public class Main {
    public static void main(String[] args) {
         
        Integer i = 10;
        int n = i;
    }
}

 

反編譯后得到如下結果

 

由反編譯的結果可知,裝箱的時候調用的是Integer的valueOf方法,拆箱時調用的是Integer的intValue方法

其他的包裝器類也類似,這里就不一一舉例了

總結:java裝箱過程是調用包裝類的valueOf方法實現的,而拆箱過程則是調用包裝類的xxxValue方法實現的(xxx代表對應的基本類型)

 

三、面試中相關問題:

下面的這段代碼將輸出什么:

public class Main {
    public static void main(String[] args) {
         
        Integer i1 = 100;
        Integer i2 = 100;
        Integer i3 = 200;
        Integer i4 = 200;
         
        System.out.println(i1==i2);
        System.out.println(i3==i4);
    }
}

  

有人會答true,也有人會答false

正確答案是:

true
false
View Code

 

結果顯示i1和i2指向同一個對象,i3和i4指向的是不同的對象 


免責聲明!

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



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