每次为Iterables调用for循环的“条件”吗?

时间:2011-10-07 19:45:34

标签: java for-loop conditional-statements iterable

假设我有以下代码:

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

和Node.getIterable()返回一个iterable。是每次调用getIterable()函数还是仅在for循环启动时调用?我应该把它改成:

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

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:3)

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