5

可以说我有以下代码:

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
}
4

2 回答 2

11

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

于 2011-10-07T19:50:19.680 回答
3

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

于 2011-10-07T19:56:27.130 回答