再談C 裝箱和拆箱操作

2022-08-26 18:30:15 字數 1239 閱讀 2285

看下面的一段**:12

3456

78vararray =newarraylist();

array.add(1);

array.add(2);

foreach(intvalueinarray)

」,value);

}

**宣告了乙個arraylist物件,向arraylist中新增兩個數字1,2;然後使用foreach將arraylist中的元素列印到控制台。

在這個過程中會發生兩次裝箱操作和兩次拆箱操作,在向arraylist中新增int型別元素時會發生裝箱,在使用foreach列舉arraylist中的int型別元素時會發生拆箱操作,將object型別轉換成int型別,在執行到console.writeline時,還會執行兩次的裝箱操作;這一段**執行了6次的裝箱和拆箱操作;如果arraylist的元素個數很多,執行裝箱拆箱的操作會更多。

你可以通過使用ilspy之類的工具檢視il**的box,unbox指令檢視裝箱和拆箱的過程

請看如下**:

varlist =newlist<int>();

list.add(1);

list.add(2);

foreach(intvalueinlist)

", value);

}

**和1中的**的差別在於集合的型別使用了泛型的list,而非arraylist;我們同樣可以通過檢視il**檢視裝箱拆箱的情況,上述**只會在console.writeline()方法時執行2次裝箱操作,不需要拆箱操作。

可以看出泛型可以避免裝箱拆箱帶來的不必要的效能消耗;當然泛型的好處不止於此,泛型還可以增加程式的可讀性,使程式更容易被復用等等。

c 裝箱和拆箱

c 裝箱和拆箱 概念 裝箱 將值型別轉換為引用型別的過程叫做裝箱 值型別 引用型別 相反,拆箱 將引用型別轉換為值型別 叫做拆箱 引用型別 值型別 裝箱例子 int i 2008 object obj i console.writeline 1 i的值為,裝箱之後的值 i,obj i 927 con...

C 裝箱和拆箱

1 什麼是裝箱和拆箱 裝箱是將值型別轉換為引用型別 拆箱是將引用型別轉換為值型別 2 什麼時候需要裝箱?值型別是高效輕量的型別,因為預設情況下在堆上不包括他們的物件元件,然而,如果我們需要物件元件,這個時候就需要裝箱了。最常見的場景就是 乙個方法你希望能共用,設定的引數型別是object型別 引用型...

C 裝箱和拆箱

值型別例項進行裝箱時的步驟 1 在託管堆中分配記憶體。需要注意的是,由於是將值型別進行引用型別化,因而分配的記憶體空間除了值型別各個欄位所需的記憶體之外,還要加上託管堆所有物件都有的兩個額外成員 型別物件指標和同步塊索引 所需的記憶體。2 將值型別的字段複製到新分配的堆記憶體中。3 返回物件位址,即...