避免创建不必要的对象

避免创建不必要的对象

概述

最好能重用对象,而不是每次需要的时候创建一个功能相同的对象

极端例子

1
String s = new String("test");

这种用法的坏处就是,语句每次被执行的时候都会创建一个新的实例。因此我们可以用字符串常量代替使用:

1
String s = "test";

对于在同一台虚拟机运行的代码,只要它们包含相同的字符串常量,该对象就会被复用。

重用

尽量使用静态工厂方法而不是构造器;

使用静态初始化器创建不会被修改的对象:

1
2
3
4
5
6
7
8
class Person {
static {
Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
/*
....
*/
}
}

autoBoxing

要优先使用基本类型而不是Boxed primitive type,考虑这样的例子:

1
2
3
4
5
6
public static void main(String[] args) {
Long sum = 0L;
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
}

由于sum被声明成Long而不是long,这意味着程序构造了2^31个Long实例。