裝箱與拆箱的操作:
裝箱過程:將值型別轉換為引用型別,就是在託管堆中建立一塊記憶體,放到值型別的值,並返回位址。
拆箱過程:將原來屬於值型別的值,拷貝給值型別物件。
箱子當然指的就是 「託管堆」。引用型別本身就在箱子裡面,所以就不存在裝箱和拆箱過程。
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值。傳遞的字串必須是基本...