裝箱與拆箱效能損耗詳解

2021-06-13 19:29:20 字數 1854 閱讀 4994

拆箱是將引用型別轉換為值型別

;反之,裝箱!

利用裝箱和拆箱功能,可通過允許值型別的任何值與object 型別的值相互轉換,將值型別與引用型別鏈結起來 ;

例如: int val = 100; 

object obj = val;

console.writeline (「物件的值 = ",obj);

這是乙個裝箱的過程,是將值型別轉換為引用型別的過程 

int val = 100;

object obj = val;

int num = (int) obj;

console.writeline ("num: ",num);

這是乙個拆箱的過程,是將值型別轉換為引用型別,再由引用型別轉換為值型別的過程

顯然,從原理上可以看出,裝箱時,生成的是全新的引用物件,這會有時間損耗,也就是造成效率降低。看下面**

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();}}

總結:1.

裝箱、拆箱必須是:值型別→引用型別  或  引用型別→值型別。

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);

n3, d4); 

判斷是否發生了裝箱,及次數。 

反編譯il**如下圖:   

可以得出發生了兩次裝箱吧。

詳解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...