java自动拆装箱有性能损失么_java自动自动拆装箱

java自动自动拆装箱

最近在看Effective-Java-3rd发现其中介绍一个自动拆装箱影响程序的性能问题。

自动拆装箱是java 1.5开始新增的功能,它允许程序员混合基本类型和包装类型,根据需要自动装箱和拆箱。但是在性能上面还是有较大的差别的。看下面的例子:

public static void main(String[] args) {

long startTime=System.currentTimeMillis();

System.out.println(sum());

System.out.println("共耗时:"+(System.currentTimeMillis()-startTime)+"毫秒");

}

private static long sum() {

//这个比较性能较差

//Long sum = 0L;

//这个性能较好

long sum = 0L;

for (long i = 0; i <= Integer.MAX_VALUE; i++)

sum += i;

return sum;

}

运行结果

累加值为:2305843008139952128

共耗时:872毫秒

而采用包装类进行相加时,例子如下

public class LongMain {

public static void main(String[] args) {

long startTime=System.currentTimeMillis();

System.out.println("累加值为:"+sum());

System.out.println("共耗时:"+(System.currentTimeMillis()-startTime)+"毫秒");

}

private static long sum() {

//这个比较性能较差

Long sum = 0L;

//这个性能较好

//long sum = 0L;

for (long i = 0; i <= Integer.MAX_VALUE; i++)

sum += i;

return sum;

}

}

运行结果如下:

累加值为:2305843008139952128

共耗时:12337毫秒

可以看出包装类与非包装类之间的运行时间相差将近14倍,究其原因,是每次包装类型的Long在进行sum+=1时,都会创建一个新的对象,所以导致性能下降。

结论:

从性能的方面考虑,基本类型优于包装类,优先使用基本类型,应提防意外的自动装箱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值