首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么要在Java中将局部变量和方法参数标记为"final“?

为什么要在Java中将局部变量和方法参数标记为"final“?
EN

Stack Overflow用户
提问于 2008-11-25 04:16:23
回答 9查看 113.2K关注 0票数 57

在Java中,您可以使用final关键字来限定局部变量和方法参数。

代码语言:javascript
复制
public static void foo(final int x) {
  final String qwerty = "bar"; 
}

这样做会导致无法在方法体中重新分配x和qwerty。

这种做法将您的代码推向不可变性的方向,这通常被认为是一个加号。但是,它也会把代码搞得乱七八糟,到处都是"final“。您对Java中局部变量和方法参数的final关键字有什么看法?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2008-11-25 09:15:11

您应该在适当的时候尝试这样做。除了在您“意外”尝试修改某个值时发出警告之外,它还向编译器提供信息,从而更好地优化类文件。这是Robert Simmons,Jr的"Hardcore Java“一书中的一个观点。事实上,这本书的第二章都花在了使用final来促进优化和防止逻辑错误上。由于这个原因,诸如PMD和Eclipse的内置SA之类的静态分析工具会标记出这些类型的情况。

票数 53
EN

Stack Overflow用户

发布于 2008-11-25 04:22:47

我个人认为这是浪费时间。我认为视觉上的混乱和额外的冗长是不值得的。

我从来没有遇到过这样的情况,我重新分配了一个错误的变量(记住,这并不是说对象是不可变的,它只是意味着你不能再给变量分配另一个引用)。

当然,这完全是个人喜好;-)

票数 27
EN

Stack Overflow用户

发布于 2008-11-25 04:35:27

对于局部变量,我倾向于避免这种情况。它会造成视觉混乱,而且通常是不必要的-一个函数应该足够短,或者只关注一个单一的影响,让你很快看到你正在修改一些不应该修改的东西。

在使用幻数的情况下,我会将它们作为一个常量私有字段,而不是放在代码中。

我只在必要的情况下使用final (例如,将值传递给匿名类)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/316352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档