裝箱與拆箱以及效能損失

2021-06-28 01:24:26 字數 980 閱讀 6879

先分析一下值型別與引用型別

值型別:      int32 i =4; 【變數i是值型別,被分配在棧上,變數包含變數例項,使用效率高】

引用型別:   object o = i; 【變數o是引用型別,被分配在託管堆,變數包含例項的指標,通過此指標引用其實例】

引用型別效能要比值型別差很多,因此盡量使用值型別,而少使用引用型別。裝箱

12

3

int32 i =4;  定義乙個值型別

objct o = i; [裝箱]這個值型別被複製並分配到託管堆,並把它轉成引用型別o,這乙個過程將會造成效能損失。

拆箱 1

2

3

4

5

int32 i =4;  定義乙個值型別

objct o = i; 轉成引用型別o

int32 n = (int32)o;[拆箱]將託管堆中的引用型別例項複製到棧中,轉為值型別n

由此可見,裝箱和拆箱是要盡量避免的操作。

同時,盡可能少用array,它的add操作會將值型別變數轉為引用型別,而泛型list則不會,它是乙個增強版的array,它可以直接新增值型別到list中。

1

2

3

4

5

int32 i = 4;  定義值型別

array a =newarray(); 定義乙個集合

a.add(i); 將值型別加入集合中,但是這乙個過程會發生裝箱。

裝箱與拆箱

總結來說 裝箱就是將值型別轉化成引用型別,拆箱就是就是將引用型別轉化成值型別 裝箱 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值。傳遞的字串必須是基本...