1、装箱
装箱时将值类型转换成object类型或此值类型到所实现接口类型的隐式转换。需要进行如下两项操作:
-
为此值类型在堆中分配一个对象实例;
-
将该值复制到新的对象中
int i=123; object o = i;
如下图所示。
2、拆箱
拆箱是与装箱相反的操作,是从object类型到值类型或从接口类型到实现该接口类型的显式转换。主要操作有以下两项:
-
首先检查对象实例,以确保它是给定值类型的装箱值;
-
将该值从实例复制到值类型变量中。
int i=123; object o = i; int j = (int)o;
如下图所示。
注意:要在运行时成功拆箱值类型,被拆箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。尝试拆箱null 会导致NullReferenceException。尝试拆箱对不兼容值类型的引用会导致InvalidCastException。