首页 > 其他 > 详细

拆箱和装箱是什么?作用是什么?为什么要进行拆箱和装箱?Integer的自动装箱和自动拆箱又有什么意义?

时间:2020-03-17 18:34:36      阅读:105      评论:0      收藏:0      [点我收藏+]

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

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

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

 4、装箱/拆箱是什么?

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

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

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

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

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

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

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

按三步进行:

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

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

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

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

   拆箱: 检查对象实例,确保它是给定值类型的一个装箱值。将该值从实例复制到值类型变量中。 有书上讲,拆箱只是获取引用对象中指向值类型部分的指针,而内容拷贝则是赋值语句之触发。

  我觉 得这并不要紧。最关键的是检查对象实例的本质,拆箱和装箱的类型必需匹配,这一点上,在IL层上, 看不出原理何在,我的猜测,或许是调用了类似GetType之类的方法来取出类型进行匹配(因为需要严 格匹配)。

拆箱和装箱是什么?作用是什么?为什么要进行拆箱和装箱?Integer的自动装箱和自动拆箱又有什么意义?

原文:https://www.cnblogs.com/cdlyy/p/12512320.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!