代码优化 基本数据类型与包装数据类型
数据运算时:使用基本数据类型而不是包装类
long sum1Start = System.currentTimeMillis();
Integer sum1 = 0 ;
for(int i = 0 ; i < Integer.MAX_VALUE ; i++){
sum1 = sum1 + i ;
}
long sum1End = System.currentTimeMillis();
System.out.println("sum1:"+(sum1End - sum1Start)); // sum1:10819
long sum2Start = System.currentTimeMillis();
int sum2 = 0 ;
for(int i = 0 ; i < Integer.MAX_VALUE ; i++){
sum2 = sum2 + i ;
}
long sum2End = System.currentTimeMillis();
System.out.println("sum2:"+(sum2End - sum2Start)); // sum2:961
- 结果分析
- Integer 声明的对象,每次进行运算后都会重新生成一个新的对象
- Integer 声明的对象 sum1 在循环中与 i 相加时,每次都会产生新的对象,共产生
Integer.MAX_VALUE - 1
次新对象
public final class Integer extends Number implements Comparable<Integer> {
// final 修饰 class ,子类不可继承
}
- 类比:String ,都由 final 修饰 class ,内部数据 final 修饰
String str = "a" + "a" ; // 编译期可确认的内容进行拼接不会产生新的对象
String a = "a" ; String str = "a" + a ; // 编译期"a" + a 拼接时,a 是一个变量,编译期还未确认,索引拼接时会产生一个新的对象