我最近被问到这个问题.但是无法简明扼要地解释这两个概念的确切区别.
例如
最终和永恒:
final String name = "John";
Run Code Online (Sandbox Code Playgroud)
如果我现在写
name = "Sam";
Run Code Online (Sandbox Code Playgroud)
我会得到一个编译器错误
一成不变的:
String name = "John";
name = "Sam";
Run Code Online (Sandbox Code Playgroud)
有用.
我认为这解释了它在应用中的一部分.但是,我能否就这两个主题得到一个好的,易于理解的解释?
Moh*_*uag 47
final意味着您不能将对象的引用更改为指向另一个引用或另一个对象,但您仍然可以改变其状态(例如使用setter方法).其中immutable意味着对象的实际值无法更改,但您可以将其引用更改为另一个.
关于问题的第二部分(不变部分),编译器创建一个String值为"Sam" 的新对象,并指向name它的引用.
Viv*_*ngh 15
final确保对象的地址保持不变.当作为Immutable表明,我们不能改变的对象一旦创建的状态.
final只是一个关键字,Immutable而是一个模式.
如果您的第一个问题是您将变量标记为
final,这意味着您将无法更改其内存地址,并且无法再次分配值.如果您的第二个问题
Immutable确保您无法更改您创建的对象的状态.
当您将字段声明为 时final,引用将不会更改。它将始终指向同一个对象。
如果该对象不是immutable,则其上的方法可用于更改该对象本身 -它是同一个对象,但其属性已更改。
当您更改字符串时,创建新的字符串对象('abcdef')并将引用从'abce'更改为'abcdef'。但是您不能删除'abcd'。仅更改参考。那是一成不变的。
最终的:
实际上final是一个关键字。当你将它添加到变量中时,你不能改变引用。
| 归档时间: |
|
| 查看次数: |
15291 次 |
| 最近记录: |