假设我有以下代码:
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
}
答案 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。你会知道的。