装箱与拆箱

前言
拆箱与装箱就是值类型与引用类型的转换,装箱是值类型转换为引用类型,一般是转换为System.Object类型或值类型实现的接口引用类型;拆箱是引用类型转换为值类型,这里的引用类型只能是被装箱的引用类型对象。

值类型和引用类型
CLR支持两种类型:引用类型和值类型;CLR是类似JVM的存在,是一个运行时环境,负责内存分配的垃圾收集等。
一下图片可以清晰展示类型分类:
这里写图片描述

装箱与拆箱的实例

int x = 1023;
object o = x; //装箱
int y = (int) o; //拆箱

上边三句代码就完成了装箱与拆箱的过程,我们很清楚的可以发现,
int→Object装箱:object o = x; //装箱
Object→int拆箱:int y = (int) o; //拆箱

装箱与拆箱的性能如何
一般来说,装箱的性能开销更大,因为引用对象的分配更加复杂,成本也更高,值类型分配在栈上,分配和释放的效率都很高。装箱过程是需要创建一个新的引用对象实例,拆箱过程需要创建一个值类型字段,开销更低。

小结
装箱装的是值类型,也只有值类型才可以装箱,拆箱拆的装箱后的引用对象,箱子就是一个存在了值类型字段的引用对象实例,箱子存储在堆上,只有值类型才有装箱和拆箱两个状态,而引用类型一直都在箱子里。

猜你喜欢

转载自blog.csdn.net/ldb987/article/details/79687125