java 自动装箱自动拆箱,java自动装箱、自动拆箱和正常情况性能比较

本文通过测试展示了Java自动装箱、拆箱、对象转换与基本类型运算的性能差异。结果显示,基本类型的运算速度远超对象及装拆箱操作。在编程实践中,应尽量避免不必要的对象使用,如果必须使用对象,装箱和手动转换的性能差距不大。
摘要由CSDN通过智能技术生成

自动装箱和自动拆箱是java5.0版本引入的,能自动将基本类型转换为对应的基本类型包装对象,那么我们比较一下他们的性能情况。

package com.wmmad.test;

import junit.framework.TestCase;

/**

* @author madding.lip

*

*

 
 

* class: compare the autoboxing and unboxing and normal's performance

*

*

*/

@SuppressWarnings("unused")

public class BoxTest extends TestCase {

public static void main(String[] args) {

testAutoboxing();

testUnboxing();

testChangeToObject();

testChangeToData();

testNormal();

testNormal1();

}

public static void testAutoboxing() {

long start = System.currentTimeMillis();

Integer result = 0;

for (int i = 0; i < 1000000000; i++) {

result = i; // autoboxing

}

long end = System.currentTimeMillis();

System.out.println("autoboxing use time is: " + (end - start) + "ms");

}

public static void testUnboxing() {

int result = 0;

long start = System.currentTimeMillis();

for (Integer i = 0; i < 1000000000; i++) {

result = i;

}

long end = System.currentTimeMillis();

System.out.println("unboxing use time is: " + (end - start) + "ms");

}

public static void testChangeToObject() {

Integer result = 0;

long start = System.currentTimeMillis();

for(int i = 0; i < 1000000000; i++) {

result = (Integer)i;

}

long end = System.currentTimeMillis();

System.out.println("change to object use time is: " + (end - start) + "ms");

}

public static void testChangeToData() {

int result = 0;

long start = System.currentTimeMillis();

for(Integer i = 0; i < 1000000000; i++) {

result = i.intValue();

}

long end = System.currentTimeMillis();

System.out.println("change to data use time is: " + (end - start) + "ms");

}

public static void testNormal() {

int result = 0;

long start = System.currentTimeMillis();

for (int i = 0; i < 1000000000; i++) {

result = i;

}

long end = System.currentTimeMillis();

System.out.println("normal use time is: " + (end - start) + "ms");

}

public static void testNormal1() {

Integer result = 0;

long start = System.currentTimeMillis();

for (Integer i = 0; i < 1000000000; i++) {

result = i;

}

long end = System.currentTimeMillis();

System.out.println("normal1 use time is: " + (end - start) + "ms");

}

}

/**

* result:

* autoboxing use time is: 6420ms

* unboxing use time is: 7297ms

* change to object use time is: 6929ms

* change to data use time is: 7089ms

* normal use time is: 2ms

* normal1 use time is: 6847ms

*/

从运行的结果可以得出几个结论:

1.对象之间的赋值和自动装拆箱差不多;

2.自动装箱贺自动拆箱的性能差不多;

3.基本数据类型的运算是远远快于对象以及自动装拆箱;

上面的例子只是针对赋值操作的结果。在java代码编写过程中,很多时候需要操作对象而不是基本数据类型,这样我们不得不进行基本类型转对象,因此我们必须评估对象转换的成本大还是自动装箱性能消耗大,我试过了把基本类型通过自动装箱和转成对象,结果发现性能差不多。

使用原则:

1.能不用对象尽量不用,因为基本类型的运算远远快于对象的运算;

2.不得不用对象时,采用自动装箱或手动转性能差不了多少;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值