拆箱是將引用型別轉換為值型別
;反之,裝箱!
利用裝箱和拆箱功能,可通過允許值型別的任何值與object 型別的值相互轉換,將值型別與引用型別鏈結起來 ;
這是乙個裝箱的過程,是將值型別轉換為引用型別的過程例如: int val = 100;
object obj = val;
console.writeline (「物件的值 = ",obj);
這是乙個拆箱的過程,是將值型別轉換為引用型別,再由引用型別轉換為值型別的過程int val = 100;
object obj = val;
int num = (int) obj;
console.writeline ("num: ",num);
顯然,從原理上可以看出,裝箱時,生成的是全新的引用物件,這會有時間損耗,也就是造成效率降低。看下面**
總結:1.class program
//用時:00:00:00.1402388,使用泛型集合後,省去了裝箱與拆箱操作,效能大大提公升。
listlist = new list();
stopwatch watch = new stopwatch();
watch.start();
for (int i = 0; i < 10000000; i++)
watch.stop();
console.writeline(watch.elapsed);
console.readkey();}}
裝箱、拆箱必須是:值型別→引用型別 或 引用型別→值型別。
object,
介面。值型別是可以實現介面。
personp=new student();//
這個叫隱式型別轉換,不叫裝箱。
studentstu=(student)p;//
這個叫顯示型別轉換,不叫拆箱。
int
型別為什麼能裝箱到
object
型別,但不能裝箱到
string
型別或person
型別,因為
object
型別時int
型別的父類。
2.
拆箱時,必須用裝箱時的型別來拆箱
裝箱時如果是
int,
拆箱必須用
int,
不能用double
3.方法過載時,如果具有該型別的過載,那麼就不叫拆箱或裝箱。
4.字串連線
string s1 = "a";
string s2 = "b";
int n3 = 10;
double d4 = 99.9;
string result = string.concat(s1, s2, n3, d4);
反編譯il**如下圖:n3, d4);
判斷是否發生了裝箱,及次數。
可以得出發生了兩次裝箱吧。
詳解C 裝箱與拆箱
裝箱 box 就是將值型別轉換為引用型別的過程。而相反的過程就叫拆箱 unbox 一 裝箱操作 例如 int val 100 object obj val console.writeline 物件的值 obj 這是乙個裝箱的過程,是將值型別轉換為引用型別的過程。值型別被裝箱時發生了什麼?1 在堆上分...
詳解C 裝箱與拆箱
裝箱 box 就是將值型別轉換為引用型別的過程。而相反的過程就叫拆箱 unbox 一 裝箱操作 例如 int val 100 object obj val console.writeline 物件的值 obj 這是乙個裝箱的過程,是將值型別轉換為引用型別的過程。值型別被裝箱時發生了什麼?1 在堆上分...
裝箱與拆箱
總結來說 裝箱就是將值型別轉化成引用型別,拆箱就是就是將引用型別轉化成值型別 裝箱 int n 10 string s n.tostring 這個不是裝箱。string與int是完全不同的兩種型別,沒有父子類關係,所以不可能發生裝箱和拆箱,因為本身就不具備型別直接轉換的功能。console.writ...