记住一个原则:能重用对象就不要每次都创建一个新的对象。
例一:
String s = new String("stringette"); // 极端反例
------------------------------------------
String s = "stringette"; // 正例
字符串常量在JVM常量池中储存。
例二:
对于同时提供了静态工厂方法和构造器的不可变类,通常使用静态工厂方法而不是构造器,以避免创建不必要的对象。Boolean.valueOf(String) > Boolean(String)。构造器在每次被调用的时候都会创建一个新的对象。
例三:
在方法中每次都调用相同的实例。可以把该实例提出到方法外,从局部变量改为final静态域,用一个static的代码块来初始化这些不会变的实例。如果这个方法被频繁的使用,可以显著的提升性能。
例四:
适配器(adapter),有时也叫视图(view)。适配器是指这样一个对象:它把功能委托给一个后备对象,从而为后备对象提供一个可以替代的接口。由于适配器除了后备对象之外,没有其他的状态信息,所以针对某个特定对象的特定适配器而言,它不需要创建多个适配器实例。例如:Map接口的keySet方法返回该Map对象的Set视图,对于一个给定的Map对象,实际上每次返回同样的Set实例。
例五:
Java 1.5开始,有自动装箱。要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱。
例六:
通过维护自己的对象池来避免创建对象并不是一种好的做法,除非池中的对象是非常重量级的,比如数据库连接池。建立数据库连接的代价非常昂贵,而且数据库的许可可能限制你只能使用一定数量的连接。