装箱与拆箱的整理

 1、概念:装箱是将值类型装换成引用类型的过程;拆箱就是将引用类型转换成值类型的过程;

 2、利用装箱和拆箱功能,通过允许值类型的任何值与Object类型的值进行相互转换,将引用 类型与值类型连接起来。

 3、注:只有装过箱的对象才能拆箱;

 4、装箱/拆箱是什么?

 装箱:用于在垃圾回收堆中储存值类型。装箱是值类型到Object类型或到此类型所实现的任 何接口类型的隐式转换。

 拆箱:从object类型到值类型或从接口类型到实现该接口的值类型的显示转换。

 5、为何需要装箱?(为何要将值类型转换为引用类型?)

   一种最普通的场景是调用一个包含类型为Object的参数的函数(方法),该Object可支持任意 类型,以便通用。当你需要将一个值类型传入容器时,就需要装箱了

         另一种的用法,就是一个泛型 的容器,同样是为了保证通用,而将元素定义为Object类型的,将值类型的值加入该容器时,需要装箱。  

 6:装箱/拆箱的内部操作。

   装箱: 对值类型在堆中分配一个对象实例,并将该值复制到新的对象中。

按三步进行:

   第一步:新分配托管堆内存(大小为值类型实例大小加上一个方法表指针和一个SyncBlockIndex)。

   第二步:将值类型的实例字段拷贝到新分配的内存中。

  第三步:返回托管堆中新分配对象的地址。

  这个地址就是一个指向对象的引用了。 有人这样理解:如果将Int32装箱,返回的地址,指向的就是一个Int32。我认为也不是不能这样理解, 但这确实又有问题,一来它不全面,二来指向Int32并没说出它的实质(在托管堆中)。

  

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值