是否有任何性能原因在Java中声明方法参数final?

问题

是否有任何性能原因在Java中声明方法参数final?

如:

public void foo(int bar) { ... }

与:

public void foo(final int bar) { ... }

假设bar只读取并且从未修改过foo()


#1 热门回答(88 赞)

final关键字不会出现在本地变量和参数的类文件中,因此不会影响运行时性能。它的唯一用途是澄清编码器意图变量不被改变(许多人认为它的使用可疑的原因),以及处理匿名内部类。

关于方法本身的最终修饰符是否具有任何性能增益存在很多争论,因为无论修饰符如何,方法都将在运行时由优化编译器内联。在这种情况下,它也应该仅用于限制方法的覆盖。


#2 热门回答(14 赞)

最终参数的唯一好处是它可以在匿名嵌套类中使用。如果一个参数永远不会改变,即使没有最终修饰符,编译器也会检测到它是正常操作的一部分。很少有错误是由意外分配的参数引起的 - 如果你的方法足够大,需要这种级别的工程,让它们变小 - 你调用的方法不能改变你的参数。


#3 热门回答(6 赞)

我想不出编译器如果你声明一个方法参数final的原因。

但这个问题的真正答案是 - 写两个函数,一个是最终参数,另一个是常规参数。每次运行它们一百万次,看看是否有明显的运行时间差异。

如果你担心性能问题,那么对你的代码进行一些分析工作非常重要,并找出究竟是什么让你失望。这几乎肯定不是你所期望的那样:)