我何时应该在方法中使用final变量而不是局部变量

时间:2016-12-13 02:13:36

标签: java performance

也许我的问题在2016年会非常愚蠢,因为存在许多类似的问题,但我很难理解何时应该在方法中使用最终变量而不是局部变量。哪一个会更有效率,何时应该使用它。

 public void setmethod(int var)
 {
       final int variable = var;
       System.out.println(variable);
 }

public void setmethod(int var)
 {
       int variable = var;
       System.out.println(variable);
 }

我知道输出中的结果将是相同的,而且最终字段 - 使相同的字段引用不可变但在某些情况下哪一个选项更有效率,为什么?我有点困惑

3 个答案:

答案 0 :(得分:3)

这里有几件事:

此时,Java编译器非常复杂,如果有任何性能提升,除非你处于可以想象的最严格的循环中,否则它是难以察觉的。

在您考虑优化之前,您应该在整个代码中查找其他更多宏优化(例如 - 减少http请求,数据库请求等)。我可以保证你会更多地寻找这些东西,而不是关键词。

其次,我认为你的意思是:

public void setmethod(final int var)
{
   System.out.println(var);
}

第三,我建议你总是使用final关键字,除非你真的不能。这使得任何人阅读时代码的意图更加清晰。它陈述了关于代码中可能发生什么和不可发生什么的合同。

从清晰的角度来看,尽可能使变量和字段final变得恰到好处。它与性能无关。

我一直认为这是Java的设计缺陷,默认情况下变量是可变的。相反,默认情况下,变量应该是final,而Java应该引入mutable关键字。

答案 1 :(得分:0)

你需要明确一件事,那就是你的代码片段中的两个变量都是本地的

就您的问题而言,您可以在任何变量之前使用final关键字,其值不会更改并在程序执行期间保持不变。声明任何变量final后,您将无法更改其值。

有关final的更多详情,请参阅When should one use final for method parameters and local variables?

答案 2 :(得分:0)

如果您确定不应更改变量值,那么使用final是一种很好的做法。假设您有一个复杂的方法,如果您不小心尝试更改最终变量的值,这将导致编译错误。