请考虑以下背景(这是Android代码的片段)
TextView tvTitle = findViewById(R.id.something);
// do stuff with 'tvtitle'
在这种情况下,假设最终声明和非最终声明都没问题,并且工作正常。
我的问题是:将变量声明为final还是没有任何性能优势?我在代码中的很多地方都看到普通变量被定义为final。我知道最后一个关键词的作用,但我不知道对此的表现考虑。
任何帮助都将受到高度赞赏。谢谢
答案 0 :(得分:1)
这取决于JVM的实现。使用final
变量,java虚拟机可以绕过某些检查和操作,以确保严格正确执行非最终变量。
JVM将隐式地将最终的局部变量写入。对于非私有字段,它们不能这样做,因为可以加载另一个写入它们的类。
您还应该考虑将变量final声明为有助于防止在您尝试写入时可能出现的错误。在这种情况下,您的编译器将能够更快地捕获它们。
总而言之,对于一个理智的JVM来说,宣布最终是不会有害的。
答案 1 :(得分:1)
Java编译器完全能够确定哪些变量正在被更改,哪些变量未被更改(因此首先能够强制执行final
之类的内容)。
自己为局部变量声明final
没有性能优势。唯一的优点是开发人员,例如能够知道变量没有改变,并让编译器为你验证这一点。
注意:最终的非私有方法,类和成员变量可能有优势。这提供了编译器不能仅从该源代码知道的信息。 (实际效果可能会有所不同。)