裝箱與拆箱的操作與記憶體管理

2022-03-07 03:13:39 字數 692 閱讀 5550

裝箱與拆箱的操作:

裝箱過程:將值型別轉換為引用型別,就是在託管堆中建立一塊記憶體,放到值型別的值,並返回位址。

拆箱過程:將原來屬於值型別的值,拷貝給值型別物件。

箱子當然指的就是 「託管堆」。引用型別本身就在箱子裡面,所以就不存在裝箱和拆箱過程。

int i=10;

object o=i;//發生一次裝箱操作

int b=(int)o;//發生一次拆箱操作

記憶體管理:

值型別與引用型別是如何分配記憶體及初始化

值型別在堆疊上面的分布過程:(由高位向低位擴充套件),假如堆疊指標初始位於50000,向下擴充套件4byte,返回指標位址

int x=100;

在x上面的一塊合適的大小的記憶體塊分配 a ,2byte

char a='c';

堆疊特點(後進先出)棧頂先出,因為是不斷向下低位置擴充套件。

引用型別在託管堆上面的記憶體分配。

vipuser user;

首先在堆疊上面分配乙個4位元組的記憶體,存放物件引用位址。

user=new vipuser();

1.首先分析要分配的記憶體大小為多少,遍歷所有父類及自身 字段大小。字段記憶體一般是以4倍數分配的,還有固定的兩個附加成員

typehandle 4byte指向loader heap上的methodtable方法表。

syncblockindex

裝箱與拆箱

總結來說 裝箱就是將值型別轉化成引用型別,拆箱就是就是將引用型別轉化成值型別 裝箱 int n 10 string s n.tostring 這個不是裝箱。string與int是完全不同的兩種型別,沒有父子類關係,所以不可能發生裝箱和拆箱,因為本身就不具備型別直接轉換的功能。console.writ...

裝箱與拆箱

public class integertest 執行結果 false true 解釋 integer.class 建立快取陣列 private static class integercache static final integer cache new integer 128 127 1 st...

拆箱與裝箱

裝箱 把基本型別的資料,包裝到包裝類中 基本資料型別資料 包裝類 構造方法 integer int value 構造乙個新分配的integer物件,他表示指定的int值。integer string s 構造乙個新分配的integer物件,他表示string引數所指示的int值。傳遞的字串必須是基本...