【问题标题】:Does enhanced for always run first-to-last? [duplicate]增强的总是从头到尾运行吗? [复制]
【发布时间】:2017-11-30 15:13:31
【问题描述】:

使用 Java 增强的 for 循环,如果我需要按任何特定顺序进行处理(例如:在与集合的顺序相同)。 应该似乎很明显,但另一方面,结构的语法似乎暗示我不应该依赖或知道这一点。

也许令人尴尬的是,我无法找到任何明确说明增强的 for 循环按从前到后的顺序处理的文档。是否存在此类文档,如果存在,我在哪里可以找到它?

【问题讨论】:

  • 我不知道在哪里可以找到文档,但我坚信增强的 for 循环总是按从头到尾的顺序处理

标签: java for-loop iterator


【解决方案1】:

也许令人尴尬的是,我无法找到任何明确说明增强的 for 循环按从前到后的顺序处理的文档。是否存在此类文档,如果存在,我在哪里可以找到它?

Java 语言语法和语义的权威参考是Java Language Specification。如果您对文档的搜索没有将您带到那里,那么可能确实有点尴尬。 Section 14.14.2 of JLS 8 涵盖了增强的 for 循环的语义。我这里就不引用了,但它涵盖了两种情况:

  • 当for 循环的迭代结束于Iterable 时,它会获取该对象的迭代器并按照迭代器的next() 方法返回的顺序处理元素。

  • 当for 循环的迭代在数组上时,它按索引顺序处理元素,从 0 开始。

【讨论】:

    【解决方案2】:

    增强的 for 循环的顺序取决于要循环的 Collection 的 Iterator。所以只要这以正确的顺序返回对象,for循环就会按预期工作: https://blogs.oracle.com/corejavatechtips/using-enhanced-for-loops-with-your-classes

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-08
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      • 2012-09-03
      • 2013-07-17
      • 2019-05-25
      相关资源
      最近更新 更多