先分析一下值型別與引用型別
值型別: 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 =
new
array(); 定義乙個集合
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值。傳遞的字串必須是基本...