總結來說:裝箱就是將值型別轉化成引用型別,拆箱就是就是將引用型別轉化成值型別
裝箱:
int n = 10;
string s = n.tostring();//這個不是裝箱。string與int是完全不同的兩種型別,沒有父子類關係,所以不可能發生裝箱和拆箱,
因為本身就不具備型別直接轉換的功能。
console.writeline(s);
int n = 10;
//n是int型別,int就是int32,而int32是乙個結構繼承字system.valuetype而該類又繼承自object,所以int型別與object型別具有子父類關係,所以可以發生型別
object o = n;//這裡發生了一次裝箱。
console.writeline(o);
person p = new person();
object o = p; //都是引用型別,所以沒有裝箱。
console.writeline(o);
int n = 10, m = 100;
string s1 = "58";
string s2 = "200";
string s = n + m + s1 + s2; //只發生了一次裝箱,先把n與m相加,然後再與字串拼接,呼叫concat()方法,轉換成object型別。
//string s = n + s1 + m + s2;//這裡發生了兩次裝箱
int r = int.parse(s);
console.writeline(r);//如果遇到函式過載有對應的型別則也不發生裝箱。
"最後結果是:", r);// 這裡呼叫了object引數的過載所以這裡也裝箱了
拆箱:
double d = 90;
object o = d; //裝箱
int n = (int)o;//拆箱,但是拆箱有問題,裝箱的時候使用的什麼資料型別,拆箱的時候必須還是使用對應的資料型別拆箱。
裝箱與拆箱的效率問題:
arraylist arraylist = new arraylist();
stopwatch watch = new stopwatch();
watch.start();
for (int i = 0; i < 10000000; i++)
watch.stop();
console.writeline(watch.elapsedmilliseconds);
console.readkey();
執行結果為:
1339 毫秒
下面沒有裝箱:
listlist = new list();
stopwatch watch = new stopwatch();
watch.start();
for (int i = 0; i < 10000000; i++)
watch.stop();
console.writeline(watch.elapsedmilliseconds);
console.readline();
執行結果為:
162毫秒
由以上可知裝箱,拆箱是十分影響效能的
裝箱與拆箱
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值。傳遞的字串必須是基本...
裝箱與拆箱
裝箱與拆箱 裝箱是將值型別轉換為引用型別或者是值型別 如 結構 實現任一介面型別的過程。當 clr 對值型別進行裝箱時,會將該值包裝到 system.object 內部。再將後者儲存在託管堆上。拆箱就是將從物件中提取值型別或者介面型別到實現該介面的值型別的顯式轉換。裝箱時隱性的,拆箱是顯式的。裝箱裝...