使用对象类型让我们感觉更OO,更方便,但是在有些场景是不可以使用的。
package com.design.autoboxing;
public enum AutoBoxing {
Instance;
public static void main(String[] args){
AutoBoxing boxing = AutoBoxing.Instance;
long startTime = System.currentTimeMillis();
boxing.autoBoxing();
long endAutoBoxingTime = System.currentTimeMillis();
System.out.println("Auto time is:" + ((endAutoBoxingTime - startTime)));
boxing.notAutoBoxing();
long endNotAutoBoxingTime = System.currentTimeMillis();
System.out.println("Not Auto time is:" + ((endNotAutoBoxingTime - endAutoBoxingTime)));
}
public void autoBoxing(){
Long sum = 0L;
for(Long i = 0L;i < Integer.MAX_VALUE;i ++){
sum += i;
}
System.out.println(sum);
}
public void notAutoBoxing(){
long sum = 0L;
for(long i = 0;i < Integer.MAX_VALUE;i ++){
sum += i;
}
System.out.println(sum);
}
}
结果:
2305843005992468481
Auto time is:16699
2305843005992468481
Not Auto time is:1332
最终的结果是一致的,但是性能差了很多倍,因为在使用对象类型时,每次循环都需要创建一个对象类型,这也就导致需要创建Integer.MAXVALUE个对象。
对象类型有其自身的好处,同时带来的开销也不是很大;一般不需要考虑,但如果我们开发的是对性能要求极致的模块,这些还是需要考虑的。