在Java中,在循环中调用字段访问器是否会在循环的每次迭代中创建新的引用?

Fea*_*nor 2 java optimization loops

说我有一个循环

for (Foo aType : bar.getAList()) {
   if (aType.getBaz().equals(baz)) {

   return aType;
   }
}
Run Code Online (Sandbox Code Playgroud)

bar.getAList()在循环的每次迭代中调用.JVM /编译器是否跟踪这是同一个对象这一事实,或者它是否天真地调用该方法并每次创建对List的引用?

另外,这有什么可担心的(回想一下Jackson,Knuth和Wulf关于优化的格言)吗?

Col*_*ert 8

每次迭代都不会调用bar.getAList().在编译期间,代码被简化为:

for(Iterator<Foo> it = bar.getAList().iterator(); it.hasNext();){
    Foo aType = it.next();
    //...
}
Run Code Online (Sandbox Code Playgroud)

资源: