1.定义
装箱:值类型转换为引用类型。
拆箱:引用类型转换为值类型。
关于值类型和引用类型,之前用了一篇文章来做了浅显的讨论:【傻傻分不清楚】C#值类型、引用类型 。
2.细节讨论
2.1装箱
例子:
object ojb = 1;
上面一行代码是很简单的装箱,1是int类型,是值类型,隐式转换为object引用类型。
执行装箱操作时不可避免的要在堆上申请内存空间,并将堆栈上的值类型数据复制到申请的堆内存空间上,这肯定是要消耗内存和cpu资源的。
2.2拆箱
object obj = 1;
int a = (int)obj;
拆箱操作同样需要额外消耗内存。
关于装箱、拆箱更底层的东西,有大牛做了分析:C#装箱拆箱