Effective Java第五条:避免创建不必要的对象

第五条:避免创建不必要的对象

1, 有个一典型的例子

String s=new String(“a”);

这个语句每次都都创建一个新的string实例。但是这没有必要。你可以这么写。

String s=”a”;

这样就避免了创建一个新的string实例。

2, 对于同时提供了静态工厂方法和构造器的不可变类,通常可以使用静态工厂方法而不是构造器,以避免创建不必要的对象。构造器在每次调用的时候都会创建一个新的对象,而静态工厂方法则从来不要求这么做,实际上也不会这样做。

3, 请使用static方法和static变量来表示定值的数据,这样可以有效的避免重复创建定值的对象。

4, 如果在一个类中,需要使用静态方法实例的方法,并没有使用静态方法,那么你可以考虑延迟初始化(lazily initializing,但是这么做会让实现复杂化,也会影响性能。

5, 我们讨论不创建重复对象,显然这个对象是不可变的,是可以重用的。但是有些情况并不这么明显。例如适配器(adapter)的情形,有时也叫做视图(view),适配器就是指这样一个对象:它把功能委托给一个后备对象(backing object),从而为后备对象提供一个可以替代的接口。由于适配器除了后被对象之外,没有其他的状态信息,所以针对某个给定对象的特定适配器而言,它不需要创建多个适配器实例。

例如,Map接口的keySet方法返回该Map对象的Set视图,其中包含该Map中的所有键(key),好像每次调用keySet都应该创建一个新的Set实例,但是对于一个给定的Map对象,实际上每次调用keySet都返回同样的Set实例。因为他们由同一个Map实例支撑。

6, jdk1.5中,有一个创建多余对象的新方法,叫做自动装箱(autoboxing),注意,要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱。

7, 对于小对象的创建,其代价是很廉价的。

8, 重用对象需要付出的代价要远远大于因创建重复对象而付出的代价,必要时如果没能实施保护性拷贝,将会导致潜在的错误和安全漏洞,而不必要的创建对象则只会影响程序的风格和性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值