1. 程式人生 > >裝箱和拆箱

裝箱和拆箱

說明 沒有 復制 har add 類型轉換 width console 內存

裝箱:將值類型轉換成引用類型

int i = 1; //聲明一個值類型的變量,並給其賦值

object j = i;//將值類型賦值給引用類型,這裏就發生了裝箱操作,這個過程是隱式的。註意:此時,i 和j 只是值相同,他們並不在內從的同一個位置,這時,改變i或者j。都互相不影響。

裝箱的過程,相當於實例化一個引用類型的對象,然後把值類型的值放進去。

int i = 1;

object j = i;

i = 6;

j = 8;

console.writeLine(i+" "+j);

此時輸出的是 6 8 說明他們互相獨立。

拆箱:把引用類型轉換成值類型,需要顯示的轉換

一般,為了統一操作一些值類型的對象時,或者把值類型復制給一個方法的時候,用裝箱操作。

比如:一些方法的參數是Object類型,根據裏氏轉換,所以類型都可以賦值給父類型,所以用裝箱操作,把值類型裝箱,轉換成引用類型。

值類型:

byte,short,int,long,float,double,decimal,char,bool 和 struct 統稱為值類型。

引用類型:

string 和 class統稱為引用類型。

值類型變量聲明後,不管是否已經賦值,編譯器為其分配內存,存儲在內存的棧中。

引用類型當聲明一個類時,只在棧中分配一小片內存用於容納一個地址,而此時並沒有為其分配堆上的內存空間。當使用 new 創建一個類的實例時,分配堆上的空間,並把堆上空間的地址保存到棧上分配的小片空間中。

值類型的實例通常是在線程棧上分配的(靜態分配),但是在某些情形下可以存儲在堆中。

引用類型的對象總是在進程堆中分配(動態分配)。

裝箱和拆箱