应该避免创建对象的几种情况:
- 字符串常量,不要写String s = new String("xxx"),写String s = "xxx"
- 不可变类通常可利用静态工厂方法来避免创造不必要的对象,如 Boolean.valueOf(String)
- 那些已知不会被修改的对象,可以被重用的对象
- 适配器、视图对象,例如Map#keySet方法所返回的对象
- 自动装箱的对象;Long acc = 0; acc += 1; 每次修改acc都会重新创建一个Long对象
不过,不要认为创建对象是非常昂贵的操作。通过创建附加的对象,提升程序的清晰性、简洁性和功能性,通常是件好事。
反之,维护自己的对象池来避免创建对象并不是一种好的做法,除非池中的对象是非常重量级的,比如数据库连接池等。
注意,在提倡使用保护性拷贝的时候,参考第39条。