自動裝箱和拆箱詳解

2021-09-29 10:25:26 字數 1453 閱讀 8156

一、什麼是自動裝箱和拆箱 

裝箱:將基本資料型別轉換成包裝型別;

拆箱:將包裝型別轉換成基本資料型別;

integer i = 1;//自動裝箱

int j = i;//自動拆箱

--真正執行

integer i = integer.valueof(1);//手動裝箱

int j = i.intvalue();//手動拆箱

二、自動裝箱和拆箱 是怎麼執行的呢

integer i = 1;//在編譯過程中程式自動呼叫了integer.valueof(...)的方法,真正執行的integer i = integer.valueof(1);方法

int j = i;//這裡的i是integer型別,在編譯過程中程式自動呼叫了intvalue()的方法,真正執行的int j = i.intvalue();方法

三、原始碼分析

以integer為例,來分析一下它的原始碼: 

1、首先來看看integer.valueof函式

否則,integercache.cache[i + offset];是什麼呢?

是乙個靜態的integer陣列物件,也就是說最終valueof返回的都是乙個integer物件。 

是乙個物件快取(放在常量池裡)。這裡,一般會有這樣的題:

integer i=1;integer j=1;  system,out.println(i == j);

答案:true。因為都是從快取中拿到的值,而不是新建立的物件。

所以我們這裡可以總結一點:裝箱的過程會建立對應的物件,這個會消耗記憶體,所以裝箱的過程會增加記憶體的消耗,影響效能。

2、接著看看intvalue函式

原始碼參考:

public final class integer extends number implements comparable

return new integer(i);//不存在,再建立

}//---intvalue()方法

public integer(int value)

public integer(string s) throws numberformatexception

public int intvalue()

public static int parseint(string s, int radix)

throws numberformatexception

}

裝箱和拆箱,自動裝箱和自動拆箱

以integer的建立為例。裝箱 把基本資料型別轉換成包裝類物件 int integer integer num1 new integer 17 拆箱 把乙個包裝類的物件,轉換成基本型別的變數 integer int int num2 num1.intvalue 自動裝箱 integer num3 ...

自動裝箱和拆箱

概念 裝箱就是自動將基本型別資料轉為包裝型別 拆箱就是自動將包裝型別轉為基本型別。具體實現 自動裝箱 integer total1 99 編譯後 integer total integer.valueof 99 自動拆箱 int total2 total1 編譯後 int total2 total1...

自動裝箱 和 自動拆箱

自動裝箱 auto boxing 基本型別就自動地封裝到與它相同型別的包裝中,如 integer i 100 本質上是,編譯器編譯時為我們新增了 integer i new integer 100 自動拆箱 unboxing 包裝類物件自動轉換成基本型別資料,如 int a new integer ...