裝箱與拆箱:裝箱是將值型別轉換為引用型別或者是值型別(如:結構)實現任一介面型別的過程。當 clr 對值型別進行裝箱時,會將該值包裝到 system.object 內部。
再將後者儲存在託管堆上。拆箱就是將從物件中提取值型別或者介面型別到實現該介面的值型別的顯式轉換。裝箱時隱性的,拆箱是顯式的。
裝箱裝箱是值型別到引用型別或者這個值型別所實現的任何介面型別的隱式轉換。對值型別裝箱會在堆中分配乙個物件例項,並將該值複製到新的物件中。
下面**在做裝箱操作:在堆疊上建立物件引用obj,而在堆上則引用int型別的值。該值是賦給變數i的值型別值的乙個副本。
1 int i = 123;
2 //值型別變成引用型別,裝箱,隱式的
3 object obj = i;
下圖說明了兩個變數i和obj之間裝箱轉換:
拆箱下面的**表示先進行裝箱操作再接著進行拆箱操作:
1 int i = 123;
2 //值型別變成引用型別,裝箱,隱式的
3 object obj = i;
4 //將從引用型別中提取值型別,拆箱,顯式的
5 int j = (int)obj;
**過程如圖:
拆箱的操作包括:
檢查物件例項,以確保它是給定值型別的裝箱值。
將該值從例項複製到值型別變數中。
裝箱和拆箱對程式效能的影響
相對於簡單的賦值而言,裝箱和取消裝箱過程需要進行大量的計算。對值型別進行裝箱時,必須分配並構造乙個新物件。反之,拆箱所需的強制轉換也需要進行大量的計算。所以在程式中應該儘量減少裝箱和拆箱的操作。
裝箱與拆箱
總結來說 裝箱就是將值型別轉化成引用型別,拆箱就是就是將引用型別轉化成值型別 裝箱 int n 10 string s n.tostring 這個不是裝箱。string與int是完全不同的兩種型別,沒有父子類關係,所以不可能發生裝箱和拆箱,因為本身就不具備型別直接轉換的功能。console.writ...
裝箱與拆箱
public class integertest 執行結果 false true 解釋 integer.class 建立快取陣列 private static class integercache static final integer cache new integer 128 127 1 st...
拆箱與裝箱
裝箱 把基本型別的資料,包裝到包裝類中 基本資料型別資料 包裝類 構造方法 integer int value 構造乙個新分配的integer物件,他表示指定的int值。integer string s 構造乙個新分配的integer物件,他表示string引數所指示的int值。傳遞的字串必須是基本...