1、装箱是将值类型转换为引用类型(或者转换为此值类型所实现的任何接口类型)的隐式转换,当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。
1 int i = 123; 2 //值类型变成引用类型,装箱,隐式的 3 object obj = i;
2、拆箱是将引用类型转换为值类型(或接口类型到实现该接口类型的值类型)的显示转换 。
1 int i = 123; 2 //值类型变成引用类型,装箱,隐式的 3 object obj = i; 4 //将从引用类型中提取值类型,拆箱,显式的 5 int j = (int)obj;
拆箱的操作包括:
检查对象实例,以确保它是给定值类型的装箱值。
将该值从实例复制到值类型变量中。
3、 .NET中,数据类型划分为值类型和引用(不等同于C++的指针)类型,与此对应,内存分配被分成了两种方式,一为栈,二为堆,注意:是托管堆。
值类型只会在栈中分配。引用类型分配内存与托管堆。托管堆对应于垃圾回收。