無法逃避的裝箱和拆箱

2022-02-02 14:13:47 字數 770 閱讀 6210

概念

裝箱:由值型別轉換為引用型別

拆箱:由引用型別轉換為值型別

**解析

逐步分析以上**:

1 int i=5; 在棧中新建變數i,值為5

2 object o=i;在堆中新建變數o,儲存實際值5,並將5在堆中的位址儲存在棧中

3 int j=(int)o;在棧中新建變數j,通過棧中o的位址訪問對應記憶體的值,並將該值儲存在棧中j的位址上

補充

從**分析和**可以看出裝箱和拆箱存在以下問題:

1 占用空間,裝箱和拆箱在堆和棧上開闢空間,已占用的空間無法及時**

2 效能影響,拷貝占用cpu,額外的資源開銷

疑惑解答

為什麼裝箱比拆箱開銷大?

從圖上可以看出裝箱和拆箱都涉及空間的開闢,但裝箱不僅有指標耗費,還有拷貝占用cpu資源,從這兩點上說裝箱比拆箱更占用資源。

建議:盡量避免使用裝箱和拆箱

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

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

裝箱和拆箱

在c 中的有兩種型別的變數 值型別和引用型別。當值型別和引用型別相互轉化時,會發生裝箱和拆箱的過程。這裡有一點要宣告 經過拆箱或裝箱的物件會多出它自己乙份拷貝,如圖所示 從圖可以看出它和它的拷貝不在乙個儲存區域。這也是值型別和引用型別的區別所在。值型別總是在棧中,而引用型別總是在託管堆中。目前j2s...

裝箱和拆箱

裝箱 boxing 和拆箱 unboxing 是c 型別系統中重要的概念。它通過允許任何數值型別的資料被轉換為任何形式型別的物件提供了數值型別和引用型別間的緊密聯絡。裝箱和拆箱使得對在其中任何型別都可以最終被看作物件的型別系統的統一的觀察變為可能。裝箱轉換允許任何數值型別可以隱式地轉換為 objec...