Java 变量的final关键字
final
关键字如何不使变量不可变? 维基百科说没有。
How does the final
keyword not make a variable immutable? Wikipedia says it doesn't.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
final
关键字如何不使变量不可变? 维基百科说没有。
How does the final
keyword not make a variable immutable? Wikipedia says it doesn't.
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
尽管不建议这样做,但 Java 允许使用反射修改最终变量。
Although it's not recommended, Java allows final variables to be modified using reflection.
假设您已声明 myList 是最终的。您仍然可以向 myList 添加新项目,因此它的状态不是一成不变的。由于 Final 关键字,您不能做的是更改 myList 以引用不同的列表。
Suppose you have declared that myList is final. You can still add new items to myList, so its state is NOT immutable. What you can't do, because of the final keyword, is to change myList to refer to a different list.
阅读维基百科文章的其余部分:
Read the rest of the Wikipedia article:
因为如果引用是最终的,您仍然可以更改引用所指向的对象中的内容。您只是无法更改参考。
because if a reference is final, you can still change things in the object to which the reference points. You just cant change the reference.
对于诸如 int、double、char 等原语,它的工作原理可能更符合您的预期。
For primitives such as
int, double, char
etc it works more as you might expect.在Java中,术语final指的是引用,而immutable指的是对象。将
final
修饰符分配给引用意味着它不能更改为指向另一个对象,但如果对象本身是可变的,则可以对其进行修改。例如:
正如维基百科文章提到的,如果您来自 C++,则必须将
const
的概念分解为final
和不可变的。In Java, the term final refers to references while immutable refers to objects. Assigning the
final
modifier to a reference means it cannot change to point to another object, but the object itself can be modified if it is mutable.For example:
As the Wikipedia article mentions, if you are coming from C++, you must dissociate the concept of
const
intofinal
and immutable.