装箱和拆箱

本文探讨了装箱和拆箱的概念,它们如何在将值类型转换为引用类型和反之过程中影响效率。重点讲解了为何装箱常见于类型为Object的方法调用,以及它带来的性能问题。通过实例演示和使用泛型优化,揭示了避免装箱拆箱的重要性。
摘要由CSDN通过智能技术生成

什么是装箱拆箱?

装箱是将值类型转换为引用类型
拆箱是将引用类型转换为值类型。
值类型和引用类型详见: link.
利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换。
需要注意的是被装过箱的对象才能被拆箱。

为什么需要装箱?

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

装箱拆箱引发的效率问题

例如:int a = 100; object b = a;
这就是一个简单的装箱,可以看出装箱时,生成的是全新的引用对象,这会有时间损耗,也就是造成效率降低。因此需要避免装箱,拆箱操作。
对于装箱和拆箱对性能的解决办法是在程序中使用大量的泛型来代替装箱拆箱操作。
例如
下面展示一些 装箱拆箱代码片,通过如下操作会发现非常耗时。

ArrayList myArrayList = new ArrayList();//这是一个引用类型
int count;//这是一个值类型
for(count = 0; count <50000000 ; count++)
{
	myArrayList.Add(count);//装箱操作
	int j;
	j= (int)myArrayList[count];//拆箱操作
}

我们可使用泛型来代替如上代码,性能就会优化很多

List<int> myArrayList = new List<int>();//这是一个泛型
int count;//这是一个值类型
for(count = 0; count <50000000 ; count++)
{
	myArrayList.Add(count);//将值类型加入泛型数组
	int j;
	j= myArrayList[count];//得到j
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值