1、
装箱和拆箱是一个抽象的概念
2、
装箱是将 值类型 转换为 引用类型 ;拆箱是将 引用类型 转换为 值类型
利用装箱和拆箱功能,可通过允许 值类型 的任何值与 Object 类型 的值相互转换,将值类型与引用类型链接起来
例如:
int val = 100;
object obj = val;
Console.WriteLine (“对象的值 = {0}", obj);
这是一个装箱的过程,是将 值类型 转换为 引用类型 的过程
int val = 100;
object obj = val;
int num = (int) obj;
Console.WriteLine ("num: {0}", num);
这是一个拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程
注:被装过箱的对象才能被拆箱
3、
.NET中,数据类型划分为 值类型 和 引用 (不等同于C++的指针) 类型 ,与此对应,内存分配被分成了两种方式,一为栈,二为堆,注意:是托管堆。
值类型只会在栈中分配。
引用类型分配内存与托管堆。
托管堆对应于垃圾回收。
装箱和拆箱是一个抽象的概念
2、
装箱是将 值类型 转换为 引用类型 ;拆箱是将 引用类型 转换为 值类型
利用装箱和拆箱功能,可通过允许 值类型 的任何值与 Object 类型 的值相互转换,将值类型与引用类型链接起来
例如:
int val = 100;
object obj = val;
Console.WriteLine (“对象的值 = {0}", obj);
这是一个装箱的过程,是将 值类型 转换为 引用类型 的过程
int val = 100;
object obj = val;
int num = (int) obj;
Console.WriteLine ("num: {0}", num);
这是一个拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程
注:被装过箱的对象才能被拆箱
3、
.NET中,数据类型划分为 值类型 和 引用 (不等同于C++的指针) 类型 ,与此对应,内存分配被分成了两种方式,一为栈,二为堆,注意:是托管堆。
值类型只会在栈中分配。
引用类型分配内存与托管堆。
托管堆对应于垃圾回收。
4:装箱/拆箱是什么?
装箱:用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。
拆箱:从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。
5:为何需要装箱?(为何要将值类型转为引用类型?)
一种最普通的场景是,调用一个含类型为Object的参数的方法,该Object可支持任意为型,以便通用。当你需要将一个值类型(如Int32)传入时,需要装箱。
另一种用法是,一个非泛型的容器,同样是为了保证通用,而将元素类型定义为Object。于是,要将值类型数据加入容器时,需要装箱。