我知道不可变对象始终具有相同的状态,即它们实际创建时的状态。它们的不变量由构造函数建立,并且由于它们的状态在构造后不会更改,因此这些不变量始终保持良好状态,这就是为什么可以在多线程环境中安全发布它们的原因。很好,但是由于我们生活在一个动态的世界中,程序的状态不断变化,如果通过不可变的对象构造程序的状态,那么这些对象会给我们带来什么好处?
您已经回答了“这些物品能给我们带来什么好处”。
关于问题的“动态”部分,如果您需要“更改”一个不变的对象,则可以从旧对象中创建一个新对象:
Immutable oldObj = new Immutable(...); Immutable newObj = new Immutable(oldObj.property1, "a new value for property 2");
如果发现自己不断重复执行此操作,则可能需要使该对象可变,并添加能够在并发环境中使用该对象所需的相关胎面安全功能。