装箱拆箱深度解析
时间:2011-05-30 来源:孤独的鱼-萧零
问题:
Customclass myclass=new Customclass();
Object obj=myclass;
以上代码会发生装箱操作吗?
装箱:将值类型转化为引用类型
.NET FRAMEWORK 平台的的构造
万物之源:System.Object
在之下系统又分为:值类型(Value Type)和引用类型(Reference Type)
值了性:byte,short,int,float,double,bool,decimal,char,enum(枚举),struct(结构)
引用类型:类(class)、接口(interface)、委托(delegate)、数组(system.array)、string、object
解答:以上操作不做装箱操作。
装箱和拆箱系统都做了什么?
例子:
int i=10;
object o=(object) i;
第一步:新分配堆内存
第二步:将值类型的实例字段拷贝到新分配的内存中
第三步:返回堆中新分配对象的地址。这个地址就是一个指向对象的引用了。
拆箱:
带来的影响:
一个就是对于堆的操作效率比较低。
另一个对于堆上分配的内存资源,需要GC来回收,从而降低程序效率。
显然, 装箱生成的是全新的引用对象,会有时间损耗,也就是造成效率降低。
相关阅读 更多 +