很明显,不可变对象应该在大多数时间和任何可能的时候使用。 编辑当不可变对象不能在java中使用时,最好使用mutable?
这里有一些文章来鼓励这种做法: https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html
- 是简单的构建,测试和使用
- 是自动线程安全的,并没有同步问题
- 不需要拷贝构造函数
- 不需要实现克隆
- 允许的hashCode使用延迟初始化,并缓存它的返回值
- 不需要被防守复制为现场使用时
- 好好地图键和SET元件(这些对象不能改变 状态,而在收集)
- 有自己的班级不变的构造时建立的一次,它 永远需要再次检查
- 始终有“失败原子”(由约书亚布洛赫所使用的术语):如果一个 不可变对象抛出例外,它从来没有留在 不受欢迎的或inde终止状态
http://www.javapractices.com/topic/TopicAction.do?Id=29
但是在那里场景中不变的对象都不好使用或不能使用某种原因?基于
为什么显而易见的是不可变对象最应该被使用? – Maroun
*然而,有些情况下,不可变对象不适合使用或由于某种原因不能使用*? - 简单。您的设计阻止您创建实例*不可变*。这一切都归结于设计。如果你的设计允许你,那么使实例不可改变,因为它们可以提高性能并防止不必要的状态变化 – TheLostMind
带引号的文本*没有声明不可变对象应该用得最多。 – Maroun