《Effective Java 第三版》笔记之六 避免创建不必要的对象
复用单个对象而不是重复的创建新对象是经常需要做的事情。复用可以加快程序运行速度,也使得代码变得简洁。如果某个对象是不可变的,通常都可以采用复用的方式。
我们看如下的一个例子:
String s = new String("bikini"); // 不要这样使用
上述语句在每次执行的时候都会创建一个String的实例,但是这种创建方式其实没有必要。如果这样的语句出现在循环或者被频繁调用的方法中,会出现数以万计重复的String实例。我们应当采用如下方式定义:
String s = "bikini";
这个版本创建的对象是一个单例,它保证了每一个虚拟机内只会出现一个这样的字符对象。
通常情况下,我们可以使用静态工厂方法(参考《Effective Java 第三版》笔记之一 创建静态工厂方法而不是使用构造器)来实现这种情况,而不是采用不可变类的构造函数来创建不可变的变量。例如,字符串转布尔类型的方法我们应该使用Boolean.valueOf(String)而不是Boolean(String)。因为后者在每次调用的时候都会产生一个新的布尔类型对象,而前面的静态工厂方法则是复用了布尔对象。实际上,这个方法已经在Java9中被遗弃了。此外,除了复用不可变对象以外,如果你知道某个可变对象不会被修改的话也应该复用它。
