不可变对象提供了若干强于可变对象的优点和一个潜在的缺点。
首先,
不可变对象常常比可变对象更具逻辑性,因为它们没有随着时间而变化的复杂的状态空间。其次,你可
个以防万一的副本。第三,没有机会能让两个同时访问不可变对象的线程破坏它合理构造
的状态,因为根本没有线程可以改变不可变对象的状态。第四,不可变对象让哈希表键值
更安全。比方说,如果可变对象在被放进了HashSet之后被改变,那么你下一次查找这个
HashSet就找不到这个对象了。
不可变对象唯一的缺点就是它们有时需要复制很大的对象图而可变对象的更新可以在
原地发生。有些情况下这会变得难以快速完成而可能产生性能瓶颈。结果,要求库提供可
变替代以使其更容易在大数据结构的中间改变一些元素也并非是一件稀奇的事情。例如,
类StringBuilder是不可变的String的可变替代。第十八章中我们会给出更多Scala里
设计可变对象的细节。