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

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

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

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

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

===============>>#1 票数:1

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

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

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

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

===============>>#2 票数:1 已采纳

Java编译器完全能够确定哪些变量正在被更改,哪些变量未被更改(从而能够在第一时间强制执行类似final的操作)。

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


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

  ask by frogatto translate from so

未解决问题?本站智能推荐:

9回复

最终变量解释

我知道编译器如何解释Java中的final关键字,但是我们应该如何解释它的含义呢? 应该是: 1)此变量无法更改(例如内部类使用) 要么 2)我不打算更改此变量( 可能对成员变量有一些优化优势)。 我问的是因为我已经处理了默认情况下所有内容都被声明为final的代码(上
2回复

类文件格式的最终​​变量

类文件格式是否为使用变量的最终关键字提供支持? 或者它只是从代码中推断出变量的有效终结性而JIT编译器基于它执行优化? 这里 ,在类文件格式文档中,他们提到了关于final关键字,但仅限于将其与final块和final类一起使用的情况。 最终变量没有任何内容。
1回复

Java最终局部变量存储在哪里?

请看以下示例: 首先, env存储在哪里? 是吗: 由编译器复制到引用它的内部类的隐藏成员变量中 复制到堆上并在其上引用 留在堆栈上,不知何故在那里引用 别的 我的猜测是第一个选择。 其次,做这样做会产生任何性能问题(而不是简单地创建en
2回复

Android中的性能或优化:最终局部变量vs局部变量

我怀疑Java编译器或dex比没有final的局部变量更优化了最终的局部变量。 最终变量和变量之间的Android性能有什么区别吗? 谢谢。 for循环: 试着抓: 功能:
2回复

Android活动 - 最终课程与否?

根据这个SO问题和性能基准 为什么将类定义为final会改善JVM性能? http://www.javamex.com/tutorials/java_final_performance_vs_non_final_timings.shtml 我们可以假设将类定义为publ
5回复

常量实用程序类中的最终关键字

在使用具有常量实用程序类的final关键字时,我们可以获得性能和/或任何其他好处的任何差异。 [此类仅包含静态最终字段和私有构造函数以避免对象创建] 只有差异才是最终的阶级 我想知道,使用final有什么好处,以及为常量定义类的正确方法是什么。
1回复

Java如何处理实例之间的最终字段?

我有两个使用相同String值的类,并且都将它们存储为最终私有字段。 Bar : Java是否在各处存储相同的对象,还是为每个实例*复制一个对象? 选项1和2的答案是否相同? * 直觉提示前者,但您永远无法确定使用Java。 附带问题: 我想做的是:
1回复

静态最终场,静态场和性能

即使认为这不是它的主要目的,我一直认为final关键字(在某些情况下和VM实现中)可以帮助JIT。 这可能是一个都市传奇,但我从未想过,设置场地final可能会对表现产生负面影响。 直到我碰到这样的代码: private static final int THRESHOLD =
1回复

从其他类访问Java中的最终字段的正确方法

什么是访问其他类的最终字段的好方法,为什么? A)通过使其私有化并在getter和setter方法中提供功能将其与其他类隔离 B)保持默认值,并直接使用variable.methodname。 访问最终字段会直接改善性能吗?
3回复

在Java方法性能中使用final关键字? [重复]

这个问题在这里已有答案: 在Java中使用final关键字可以提高性能吗? 11个答案 方法参数中的final是否允许编译器或运行时环境更快地工作? 例如,如果您有一个变量要传递给您知道不会被修改并按原样使用的方法,那么将它声明为final是否更有效? 示