【问题标题】:Is the "condition" of a for loop called each time for Iterables?是否每次都为 Iterables 调用 for 循环的“条件”?
【发布时间】:2011-12-03 06:40:24
【问题描述】:

假设我有以下代码:

for (Object obj : Node.getIterable()) {
    //Do something to object here
}

并且 Node.getIterable() 返回一个可迭代对象。 getIterable() 函数是每次调用还是仅在 for 循环启动时调用?我应该将其更改为:

Iterable<Object> iterable = new Iterable<Object>();
//populate iterable with objects
for (Object obj : iterable) {
    //Do something
}

【问题讨论】:

  • 简单的方法来找出...只需将 Node.getIterable 包装在一个方法中,该方法还可以将一些内容写入控制台(或者如果您愿意,可以写入文件)。然后你就可以看到它被调用了多少次。我的赌注 - 它只被调用一次,但我没有足够的信心给出明确的答案。

标签: java for-loop conditional-statements iterable


【解决方案1】:

Java 语言规范详细说明了 foreach 语句的作用。有关详细信息,请参阅“14.14.2 增强的 for 语句”(http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.2)。但简而言之,实际上该语言确实保证您正在迭代的表达式只会被计算一次。

【讨论】:

    【解决方案2】:

    不,它没有。它将从getIterable() 接收到的可迭代项保存在内存中并使用该引用。快速检查的方法是在for 语句处设置一个断点并调试进入JDK 的方式。你会知道的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-23
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多