我最近被问到这个问题.但是无法简明扼要地解释这两个概念的确切区别.
例如
最终和永恒:
final String name = "John";
如果我现在写
name = "Sam";
我会得到一个编译器错误
一成不变的:
String name = "John"; name = "Sam";
有用.
我认为这解释了它在应用中的一部分.但是,我能否就这两个主题得到一个好的,易于理解的解释?
final
意味着您不能将对象的引用更改为指向另一个引用或另一个对象,但您仍然可以改变其状态(例如使用setter方法).其中immutable意味着对象的实际值无法更改,但您可以将其引用更改为另一个.
关于问题的第二部分(不变部分),编译器创建一个String
值为"Sam" 的新对象,并指向name
它的引用.
final
确保对象的地址保持不变.当作为Immutable
表明,我们不能改变的对象一旦创建的状态.
final
只是一个关键字,Immutable
而是一个模式.
如果您的第一个问题是您将变量标记为
final
,这意味着您将无法更改其内存地址,并且无法再次分配值.如果您的第二个问题
Immutable
确保您无法更改您创建的对象的状态.