一个简单的测试题: 计算所有int正直的总和。
分析:要想求所有的int类型正值的和,最终的结果用什么进行接受呢?
毫无疑问int肯定是不够大的,可以考虑用long进行接收。一个简单的demo如下:
public static void main(String [] args){
long a = new Date().getTime();
System.out.println(a);
Long sum = 0L;
for (long i = 0; Integer.MAX_VALUE > i; i++){
sum += i;
}
System.out.println(sum);
long b = new Date().getTime();
System.out.println(b);
System.out.println((b-a)/1000);
}
该测试的结果为:
1509961528957
2305843005992468481
1509961536944
7
根据上面的结果可以看出来,和为2305843005992468481,用时大约是7秒。聪明的人会发现,这样效率低了很多,一个字母带来的危害真的是很大的。经过修改后的代码如下:
public static void main(String [] args){
long a = new Date().getTime();
System.out.println(a);
long sum = 0L;
for (long i = 0; Integer.MAX_VALUE > i; i++){
sum += i;
}
System.out.println(sum);
long b = new Date().getTime();
System.out.println(b);
System.out.println((b-a)/1000);
}
这样的执行结果为:
1509961736241
2305843005992468481
1509961737967
1
可以看出效率明显提高了不少,大约提高了7倍,变量sum被声明为Long而不是long,意味着程序构造了大约2的31 次方个多余的Long实例(大约每次往Long sum中增加long时构造一个实例)。
结论很明显:优先使用基本数据类型而不是装箱基本类型,要当心无意识的自动装箱。