Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及其后续版本中更新的语言功能的摘要。
请参阅JDK发行说明,了解有关所有JDK版本的新功能、增强功能以及已删除或不推荐使用的选项的信息。
如果一个对象在构造后其状态不能改变,则被认为是不可变的。在创建简单、可靠的代码时,广泛依赖不可变对象被广泛接受为一种良好的策略。
不可变对象在并发应用中特别有用。由于它们无法改变状态,因此无法被线程干扰破坏,也不会处于不一致的状态。
程序员通常不愿意使用不可变对象,因为他们担心创建新对象的成本相对于原地更新对象而言更高。对象创建的影响经常被高估,并且可以通过不可变对象相关的一些效率来抵消。其中包括由于垃圾回收而减少的开销,以及无需保护可变对象免受破坏所需的代码的消除。
下面的子节将使用一个其实例是可变的类,并从中派生出具有不可变实例的类。这样做时,它们提供了这种转换的一般规则,并演示了不可变对象的一些优势。