1、装箱:值类型转换成引用类型
装箱时将发生:
-
在托管堆分配内存,分配的内存大小是值类型各字段所需的内存大小之和,还要加上托管堆所有对象都有的两个额外成员(类型对象指针和同步块索引)所需的内存量
-
值类型的字段复制到新分配的堆内存
-
返回对象地址,该地址是对象引用:值类型成了引用类型
-
该对象一直存在于堆内存中,直至被垃圾回收
2、拆箱:获取已装箱的堆内存上对象的各个字段地址,是一个获取指针地址的过程
拆箱时将发生:
-
如果包含“对已装箱值类型实例引用”的变量为null,抛出NullReferenceException异常
-
如果引用的对象不是所需值类型的已装箱实例,抛出InvalidCastException异常
-
将该对象从实例复制到值类型中
装箱
装箱需要显示执行,而拆箱可以隐式执行
拆箱