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

2022-08-31 17:13:16

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

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

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

这种做法将你的代码推向不可变性的方向,这通常被认为是一个加分项。但是,它也倾向于使代码混乱,“最终”无处不在。您对Java中局部变量和方法参数的最终关键字有何看法?


答案 1

您应该在适当的时候尝试执行此操作。除了在您“不小心”尝试修改值时向您发出警告之外,它还向编译器提供信息,从而更好地优化类文件。这是Robert Simmons, Jr.的《Hardcore Java》一书中的一点。事实上,本书第二章的全部篇幅都花在了使用 final 来促进优化和防止逻辑错误上。出于这个原因,PMD和Eclipse的内置SA等静态分析工具会标记这些情况。


答案 2

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

我从来没有遇到过这样的情况:我错误地重新分配了一个变量(请记住,这不会使对象不可变,这意味着您无法将另一个引用重新分配给变量)。

但是,当然,这都是个人喜好;-)


推荐