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关于优化的格言)吗?
每次迭代都不会调用bar.getAList().在编译期间,代码被简化为:
for(Iterator<Foo> it = bar.getAList().iterator(); it.hasNext();){
Foo aType = it.next();
//...
}
Run Code Online (Sandbox Code Playgroud)
资源: