Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
如果一个对象的状态在构造后不能更改,则该对象被认为是 immutable (不可变的)。最大程度上依赖不可变对象,被广泛接受为是创建简单、可靠代码的合理策略。
不可变对象在并发应用程序中特别有用。由于它们不能更改状态,因此它们不会被线程干扰破坏或在不一致状态下被观察到。
程序员通常不愿意使用不可变的对象,因为他们担心创建一个新的对象要比更新对象的成本要高。实际上创建对象的影响经常被高估,并且可以通过与不可变对象相关联的一些效率来抵消。这些包括减少垃圾回收产生的开销,以及消除保护可变对象免于损坏所需的代码。
以下小节采用其实例可变的类,并从中派生出具有不可变实例的类。通过这样做,它们为这种转换提供了一般规则,并展示了不可变对象的一些优点。