
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
昆明达内的老师知道,一般来说,最好能重用对象而不是每次需要的时候创建一个相同功能的新对象.如果对象是不可变的(immutable),它就始终可以被重用.
比如应该用:
String s = "stringette";
而不是:
String s = new String("stringette"); // Don't do this
包含相同字符串的字面常量对象是会被重用的.
对于同时提供了静态工厂方法和构造方法的不可变类,通常可以使用静态工厂方法而不是构造器,以避免创建不必要的对象.
比如Boolean.valueOf().
除了重用不可变对象以外,也可以重用那些已知不会被修改的可变对象.比如把一个方法中需要用到的不变的数据保存成常量对象(static final),只在初始化的时候创建一次(用static块),这样就不用每次调用方法都重复创建.
如果该方法永远不会调用,那也不需要初始化相关的字段,可以通过延迟初始化(lazily initializing)把这些对象的初始化放到方法第一次被调用的时候. (但是不建议这样做,没有性能的显著提高,并且会使方法看起来复杂.)
前面的例子中,所讨论的对象显然是能够被重用的,因为它们被初始化之后不会再改变.其他有些情形则并不总是这么明显了. (适配器(adapter)模式, Map的接口keySet()方法返回同样的Set实例).
Java 1.5中加入了自动装箱(autoboxing),会创建对象.所以程序中优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱.
小对象的构造器只做很少量的显式工作,创建和回收都是很廉价的,所以通过创建附加的对象提升程序的清晰简洁性也是好事.
通过维护自己的对象池(object pool)来避免创建对象并不是一种好的做法(代码,内存),除非池中的对象是非常重量级的.正确使用的典型:数据库连接池.