Java中的每个表达式翻译成什么?

Java中的每个表达式翻译成什么?,java,foreach,Java,Foreach,上面的片段翻译成什么 我最感兴趣的是getList()方法调用一次,还是每次迭代/元素调用一次?它被转换为下面的代码片段,而objectWithList.getList()只调用一次 for ( SomeListElement element : objectWithList.getList() ) { ... } 相当于 for (Iterator i = objectWithList.getList().iterator(); i.hasNext();) { SomeListEl

上面的片段翻译成什么


我最感兴趣的是
getList()
方法调用一次,还是每次迭代/元素调用一次?

它被转换为下面的代码片段,而
objectWithList.getList()只调用一次

 for ( SomeListElement element : objectWithList.getList() ) { ... }
相当于

for (Iterator i = objectWithList.getList().iterator(); i.hasNext();) {
    SomeListElement e = (SomeListElement) i.next();
}
for(迭代器i=objectWithList.getList().Iterator();
i、 hasNext();){
SomeListElement元素=i.next();
//访问元素在这里
}

这是
迭代器
解决方案的简写。在问这个问题之前,您做了哪些研究?语言规范似乎是一个显而易见的地方,它给出了非常清楚的答案。你不能尝试在getList上添加一个副作用吗?@JonSkeet我偶然发现了这一点,一条引起我注意的旁注:
对于每个
,在规范中,在文档(不同的JDK文档)中,甚至在许多书中,都被称为“语法糖/增强的for循环”,用于迭代Iterable集合,这很有道理。即使是Iterable的例子,相应的字节码(foreach vs.for)也非常相似。我想知道foreach是真的在幕后使用
iterator()
还是。。你的链接说它也用于阵列。。无聊的。
for(Iterator<SomeListElement> i = objectWithList.getList().iterator(); 
                                                              i.hasNext(); ) {
  SomeListElement element = i.next();
  //access element here
}