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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

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

public static void foo(final int x) {
  final String qwerty = "bar"; 
}

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

这种做法将您的代码推向通常被认为是优点的不变性方向。但是,它也往往会在各处出现“final”的代码。对Java中局部变量和方法参数的最终关键字有什么看法?

提问于
用户回答回答于

只要适当,你应该尽量做到这一点。除了用于在您“accidentally”尝试修改值时发出警告,它还会向编译器提供信息,以便更好地优化类文件。这是Robert Simmons,Jr所着的书“Hardcore Java”中的一个要点。实际上,本书的第二章全面介绍了使用final来促进优化并防止逻辑错误。静态分析工具,如PMD和Eclipse的内置SA标记这些种情况出于这个原因。

用户回答回答于

我个人认为这是浪费时间。我相信视觉混乱和增加冗长是不值得的。

我从来没有遇到过我已经重新分配的情况(记住,这不会使对象不可变,所有这些意味着您无法重新分配变量的另一个引用)。

扫码关注云+社区