值型別引用型別
變數存放的內容
實際值引用
預設值空
記憶體分配
分配在棧中
分配在堆中
記憶體**
作用域結束時,所佔空間自行釋放
使用完後不立即**,而是交給gc處理**
效率值型別效率高,不需要位址轉換
引用型別效率較低,需要進行位址轉換
賦值操作
建立乙個新物件
建立乙個引用
型別擴充套件
不易擴充套件,所有值型別都是密封(seal)的,所以無法派生出新的值型別
具有多型的特性,方便擴充套件 裝箱
拆箱概念
值型別→引用型別
裝箱是值型別到 object 型別或到此值型別所實現的任何介面型別的隱式轉換。
引用型別→值型別
拆箱從 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)首先從託管堆中為新生成的引用物件分配記憶體。
2)然後將值型別的資料拷貝到剛剛分配的記憶體中。
3)返回託管堆中新分配物件的位址。
1)首先獲取託管堆中屬於值型別那部分欄位的位址,這一步是嚴格意義上的拆箱。
2)將引用物件中的值拷貝到位於執行緒堆疊上的值型別例項中。
注:被裝過箱的物件才能被拆箱
C 資料型別
一般來說,計算機要儲存和處理不同的資料型別,在c 中有基本的資料型別和使用者自定義資料型別以及引用型資料。我們先學習下基本的資料型別,也就是系統自帶的資料型別。每種資料型別都要佔據系統記憶體的一定空間,例如c 中的整數int 乙個整數佔4個位元組,也就是32位 計算機是用0和1二進位制來表示和處理資...
c 資料型別
型別可分為 值型別,引用型別 值型別 直接存放真正的資料,值型別都有固定的長度,值型別的變數都儲存在 堆疊 stack 上。作為值型別的變數,每個都有自己的資料,因此對乙個變數的操作不會影響其他變數。引用型別 儲存讀資料的記憶體位址的引用,位於受管制的堆 heap 上作為引用型別的變數可以引 用同一...
C 資料型別
bool system.boolean 1位元組 byte system.byte 1位元組無符號 sbyte system.sbyte 1位元組有符號 short system.int16 2位元組 ushort system.uint16 2位元組 int system.int32 4位元組 u...