装箱和拆箱的概念经常出现在面试题中。
1.装箱:将值类型转换成引用类型。装箱使得任何值类型都可以隐式地转换为Object类型或者由该值类型实现的接口类型。比如:
class Program
{
static void Main(string[] args)
{
int i = 12;
object obj = i;//此处发生装箱
}
}
如上面代码的演示,上面的两条代码执行的结果就是在堆栈中创建了一个对象obj,并引用堆上的int类型的数值。
2.拆箱:将引用类型转换成值类型。拆箱与装箱过程相反。拆箱是将Object类型或者数值类型实现的接口类型显式地转换为值类型。拆箱操作经过了两个步骤:①检查Object实力中保存的数据,确认是给定值类型的包装数值。②把数值从实例中复制出来。比如:
class Program
{
static void Main(string[] args)
{
int i = 12;
object obj = i;//此处发生装箱
int j = (int)obj;//此处发生拆箱
}
}
需要注意的是,项目开发时尽量避免装箱和拆箱,因为这两个的过程都会对性能造成影响,如果要进行类型转换,使用Convert更好。