当你不保存循环内的对象并内联它们时,它在内存上更优化吗?

noM*_*MAD 2 java

这是我想弄清楚的.

Case 1:
for(Foo foo : listOfFoos) {
  Bar bar = foo.getBar();
  if(bar == something) {
    //Do something else
    continue;
  }
}

Case 2:
for(Foo foo : listOfFoos) {
  if(foo.getBar() == something) {
    //Do something else
    continue;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果这list包含五百万Foo's,那么第二种情况在速度或记忆方面是否会优于第一种情况?

aio*_*obe 5

不会.这两个片段在CPU和内存占用方面完全相同.

javac发出的字节码实际上略有不同.(在案例1中使用了一个额外的局部变量和一对astore/ aload.)然而,这仍然是无关紧要的,因为局部变量将由 JVM/JIT内联.