裝箱 boxing 和拆箱 unboxing

2022-04-30 17:27:11 字數 974 閱讀 3497

object是引用型別,但是它的子類int32竟然不能去object能去的「要求必須是引用型別」 

的地方,違反了繼承的原則,所以需要把int32裝在object中才能傳遞。

裝箱:從值型別介面轉換到引用型別。

拆箱:從引用型別轉換到值型別。

object obj = null;//引用型別

obj = 1;//裝箱,boxing。把值型別包裝為引用型別。

int i1 = (int)obj;//拆箱。unboxing

2)下面三句**有沒有錯,以inboxing或者unboxing為例,解釋一下記憶體是怎麼變化的

int i=10;

object obj = i;

int j = obj;

分析:在inboxing(裝箱)時是不需要顯式的型別轉換的,不過unboxing(拆箱)需要顯式的型別轉換,所以第三行**應該改為:

3 int j = (int)obj;    

要掌握裝箱與拆箱,就必須了解cts及它的特點:

net重要技術和基礎之一的cts(common type system)。cts是為了實現在應用程式宣告和使用這些型別時必須遵循的規則而存在的通用型別系統。.net將整個系統的型別分成兩大類 :值型別和引用型別。

cts中的所有東西都是物件;所有的物件都源自乙個基類——system.object型別。值型別的乙個最大的特點是它們不能為null,值型別的變數總有乙個值。為了解決值型別不可以為null,引用型別可以為null的問題,微軟在.net中引入了裝箱和拆箱:裝箱就是將值型別用引用型別包裝起來轉換為引用型別;而從引用型別中拿到被包裝的值型別資料進行拆箱

。object.referenceequals();//用來判斷兩個物件是否是同乙個物件

console.writeline(object.referenceequals(3,3));//因為兩個

3被裝到了兩個箱子中,所以是

false

equals ==的關係

裝箱和拆箱,自動裝箱和自動拆箱

以integer的建立為例。裝箱 把基本資料型別轉換成包裝類物件 int integer integer num1 new integer 17 拆箱 把乙個包裝類的物件,轉換成基本型別的變數 integer int int num2 num1.intvalue 自動裝箱 integer num3 ...

裝箱和拆箱

在c 中的有兩種型別的變數 值型別和引用型別。當值型別和引用型別相互轉化時,會發生裝箱和拆箱的過程。這裡有一點要宣告 經過拆箱或裝箱的物件會多出它自己乙份拷貝,如圖所示 從圖可以看出它和它的拷貝不在乙個儲存區域。這也是值型別和引用型別的區別所在。值型別總是在棧中,而引用型別總是在託管堆中。目前j2s...

裝箱和拆箱

裝箱 boxing 和拆箱 unboxing 是c 型別系統中重要的概念。它通過允許任何數值型別的資料被轉換為任何形式型別的物件提供了數值型別和引用型別間的緊密聯絡。裝箱和拆箱使得對在其中任何型別都可以最終被看作物件的型別系統的統一的觀察變為可能。裝箱轉換允許任何數值型別可以隱式地轉換為 objec...