出处:《Effective Java》第2版第五条 ~避免创建不必要的对象
java1.5发行版本引入了自动拆装箱,它允许程序员将基本数据类型和装箱基本类型混用,按需要自动装箱和拆箱。自动装箱使得基本类型和装箱基本类型之间的差别变得模糊起来,但是并没有完全消除。它们在语义上还有微妙的差别,在性能上也有着比较明显的差别。
测试:分别用long类型和Long类型计算所有int正值的总和
public static void main(String[] args) {
//用引用数据类型Long作计算
long startTime1 = System.currentTimeMillis();
Long sum1 = 0L;
for (int i = 0; i < Integer.MAX_VALUE; i++) {
sum1 += i;
}
long endTime1 = System.currentTimeMillis();
System.out.println(sum1+"~Long耗时:"+(endTime1-startTime1)+"ms");
//用基本数据类型long作计算
long startTime2 = System.currentTimeMillis();
long sum2 = 0L;
for (int i = 0; i < Integer.MAX_VALUE; i++) {
sum2 += i;
}
long endTime2 = System.currentTimeMillis();
System.out.println(sum2+"~long耗时:"+(endTime2-startTime2)+"ms");
}
测试结果:
书作者的测试时间是43秒和6.8秒,敢情我的机器比作者的快了10倍。-_-b
使用Long类型,意味着程序构造了大约个Long对象。结论:优先使用基本数据类型,当心无意识的自动拆装箱。