装箱与拆箱

前言
拆箱与装箱就是值类型与引用类型的转换,装箱是值类型转换为引用类型,一般是转换为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; //拆箱

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

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

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子松的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值