正常变量的最终与非最终

时间:2014-04-20 14:26:48

标签: java performance final

请考虑以下背景(这是Android代码的片段)

TextView tvTitle = findViewById(R.id.something);
// do stuff with 'tvtitle'

在这种情况下,假设最终声明和非最终声明都没问题,并且工作正常。

我的问题是:将变量声明为final还是没有任何性能优势?我在代码中的很多地方都看到普通变量被定义为final。我知道最后一个关键词的作用,但我不知道对此的表现考虑。

任何帮助都将受到高度赞赏。谢谢

2 个答案:

答案 0 :(得分:1)

这取决于JVM的实现。使用final变量,java虚拟机可以绕过某些检查和操作,以确保严格正确执行非最终变量。

JVM将隐式地将最终的局部变量写入。对于非私有字段,它们不能这样做,因为可以加载另一个写入它们的类。

您还应该考虑将变量final声明为有助于防止在您尝试写入时可能出现的错误。在这种情况下,您的编译器将能够更快地捕获它们。

总而言之,对于一个理智的JVM来说,宣布最终是不会有害的。

答案 1 :(得分:1)

Java编译器完全能够确定哪些变量正在被更改,哪些变量未被更改(因此首先能够强制执行final之类的内容)。

自己为局部变量声明final没有性能优势。唯一的优点是开发人员,例如能够知道变量没有改变,并让编译器为你验证这一点。


注意:最终的非私有方法,类和成员变量可能有优势。这提供了编译器不能仅从该源代码知道的信息。 (实际效果可能会有所不同。)