最近有人问我这个问题。但是无法简明地解释究竟是什么将这两个概念区分开来。
例如
最终且不可变:
final String name = "John";
如果我现在写
name = "Sam";
我会收到编译器错误
不可变:
String name = "John"; name = "Sam";
有用。
我认为这解释了它在应用中的一部分。但是我可以对这两个话题得到一个很好的,易于理解的解释吗?
final意味着您不能将对象的引用更改 为指向另一个引用或另一个对象 ,但仍可以更改其状态(例如使用setter方法)。凡 不变 意味着对象的 实际值 不能改变,但你可以改变它的引用到另一个。
final
关于问题的第二部分(不变性部分),编译器将创建一个String值为“ Sam” 的新对象,并将其指向该对象name。
String
name