请仔细看下面两段代码(只有一个字母的差异)
long t = System.currentTimeMillis();
Long sum = 0L;
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum += i; //自动装箱
}
System.out.println("耗时: " + (System.currentTimeMillis() - t) + " ms") ;
结果如下:
耗时: 6756 ms
long t = System.currentTimeMillis();
//Long sum = 0L;
long sum = 0L;
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println("耗时: " + (System.currentTimeMillis() - t) + " ms") ;
结果如下:
耗时: 1248 ms
我们大致可以看出,下面的代码比上面的执行效率提高了5倍,我们可以将这种差异解释为对自动装箱功能的滥用。
我们可以说第一段代码已经被修改为下面的代码。所以我们可以利用转化后的代码(创建了不必要的“Long”实例)来解释处理速度变慢的原因。
long t = System.currentTimeMillis();
Long sum = 0L;
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum += new Long(i); }
System.out.println("耗时: " + (System.currentTimeMillis() - t) + " ms") ;
|
|