Java:使用getter vs缓存值

Mir*_*ric 2 java performance

我有一个返回String的getter,我将它与其他String进行比较.我检查null的返回值,所以我的if语句看起来像这样(如果是真的话我真的会提前退出)

if (someObject.getFoo() != null && someObject.getFoo().equals(someOtherString)) {
  return;
}
Run Code Online (Sandbox Code Playgroud)

从表面上看,存储返回的String而不是像这样两次调用getter会更好吗?它甚至重要吗?

String foo = someObject.getFoo();
if (foo != null && foo.equals(someOtherString)) {
  return;
}
Run Code Online (Sandbox Code Playgroud)

要回答评论中的问题,不会经常执行此检查,并且getter非常简单.我很好奇如何分配一个新的局部变量与另外一次执行getter相比.

T.J*_*der 10

这完全取决于吸气剂的作用.如果它是一个简单的getter(检索数据成员),那么如果JVM确定代码是性能的热点,那么JVM将能够即时内联它.这实际上是Oracle/Sun的JVM被称为"HotSpot"的原因.:-)它将应用积极的JIT优化,它会看到它需要它(当它可以).但是,如果getter做了一些复杂的事情,那么使用它可能会慢一些,并让它重复这项工作.

如果代码不是热点,当然,您不关心性能是否存在差异.

有人曾告诉我,内联的getter有时会比缓存到局部变量的值更快,但我从来没有向自己证明这一点,也不知道为什么会出现这种情况的理论.