Effective Java学习笔记之第5条 避免创建不必要的对象
第5条 避免创建不必要的对象
一般来说,最好能重用对象而不是在每次需要的时候就创建一个相同功能的对象。
反面例子:
String s = new String("stringette"); // DON'T DO THIS!
对于同时提供了静态工厂方法和构造器都不可变类,通常可以使用静态工厂方法而不是构造器。例如,静态工厂方法Boolean.valueOf(String)几乎总是优先于构造器Boolean(String)。
除了重用不可变对象之外,也可以重用那些已知不会被修改的可变对象。
适配器是指这样一个对象:它把功能委托给一个后备对象,从而为后备对象提供一个可以替代的接口。由于适配器除了后备对象之外,没有其他的状态信息,所以针对某个给定对象的特定适配器而言,它不需要创建多个适配器。
在Java 1.5 的发行版本中,有一种创建多余对象的新方法,称作自动装箱(autoboxing),它允许程序员将基本类型和装箱基本类型混用,按需自动装箱和拆箱。
// Hideously slow program . Can you spot the object creation?
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。
要优先使用基本类型而不是装箱基本类型。要当心无意识的自动装箱。
小对象都创建和回收动作是非常廉价的,特别是在现代的JVM实现上更是如此。通过创建附加对象,提升程序的清晰性,简洁性和功能性,这通常是好事。