【问题标题】:What are for-each expressions in Java translated to? [duplicate]Java中的for-each表达式翻译成什么? [复制]
【发布时间】:2013-04-22 21:29:13
【问题描述】:
 for ( SomeListElement element : objectWithList.getList() ) { ... }

上面的sn-p翻译成什么?

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

【问题讨论】:

  • 这是Iterator 解决方案的简写。
  • 在提出这个问题之前,您进行了哪些研究?语言规范似乎是一个显而易见的地方,它非常清楚地给出了答案。 docs.oracle.com/javase/specs/jls/se7/html/…
  • 你不能自己试试在 getList 上添加一个副作用吗?
  • @JonSkeet 我偶然发现了这一点,并引起了我的注意:for-each,在规范中,在文档中(不同的 JDK 文档)甚至在许多书籍中都被提及作为“语法糖/增强的 for 循环”,用于迭代 Iterable 集合,这很有意义。甚至this doc 都体现了Iterable,对应的字节码(foreach vs. for)超级相似。我想知道 foreach 真的在幕后使用iterator() 还是......你的链接说它也用于数组......嗯。

标签: java foreach


【解决方案1】:

相当于

for(Iterator<SomeListElement> i = objectWithList.getList().iterator(); 
                                                              i.hasNext(); ) {
  SomeListElement element = i.next();
  //access element here
}

【讨论】:

    【解决方案2】:

    它被翻译成下面的代码 sn-p,objectWithList.getList() 只被调用一次。

    for (Iterator i = objectWithList.getList().iterator(); i.hasNext();) {
        SomeListElement e = (SomeListElement) i.next();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      相关资源
      最近更新 更多