首页 > 代码库 > 第五条:避免创建不必要的对象

第五条:避免创建不必要的对象

一般来说,最好能重用对象而不是在每次需要的时候都创建一个相同功能的新对象。如果对象是不可变的,他始终就是可以重用。

这里我们举出一个字符串创建的例子说明:

String str = new String("new string");

这里就是一个极为低效的方式,因为"new string"本身就是一个String实力,然后new String创建了String类型的实例将内容考呗了过去,如果这句被重复调用的话,将会造成多倍的内存开销。

这样的方式我们在开发中非常的常见的:

比如,我们的基本类型都有自己的分装类型,如int对应的Integer。在jdk1.5之后,加入了自动拆装箱操作,就是说int类型的数据可以自动装箱为Integer对象,Integer对象可以自动拆箱为int基本类型,但是这就出现了问题。

我们来看下面一个实例,计算所有int类型数据的正值之和:

public static void main(String[] args){
      Long sum = 0L;
      for(long i=0; i<Integer.MAX_VALUE; i++){
           sum += i;
      }   
      System.out.println(sum);
}

这里就是因为将保存累加数只和的sum变量设计成了Long类型,也就是说他每次加完的数据先是在内存栈中创建long性的一个数,然后又通过自动的装箱在堆中创建了一个Long型的实例对象。这样不仅提高了创建的时间,也增加了内存开销。所以我们可以得出结论:要优先的使用基本类型而不是装箱的基本类型。