不可变对象的权衡

不可变对象提供了若干强于可变对象的优点和一个潜在的缺点。

首先,

不可变对象常常比可变对象更具逻辑性,因为它们没有随着时间而变化的复杂的状态空间。其次,你可

以很自由地传递不可变对象,而或许需要在把可变对象传递给其它代码之前,需要先建造
个以防万一的副本。第三,没有机会能让两个同时访问不可变对象的线程破坏它合理构造
的状态,因为根本没有线程可以改变不可变对象的状态。第四,不可变对象让哈希表键值
更安全。比方说,如果可变对象在被放进了HashSet之后被改变,那么你下一次查找这个

HashSet就找不到这个对象了。

不可变对象唯一的缺点就是它们有时需要复制很大的对象图而可变对象的更新可以在
原地发生。有些情况下这会变得难以快速完成而可能产生性能瓶颈。结果,要求库提供可
变替代以使其更容易在大数据结构的中间改变一些元素也并非是一件稀奇的事情。例如,
类StringBuilder是不可变的String的可变替代。第十八章中我们会给出更多Scala里
设计可变对象的细节。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值