Вызывается ли «условие» цикла for каждый раз для Iterables? - PullRequest
5 голосов
/ 07 октября 2011

Допустим, у меня есть следующий код:

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
}

Ответы [ 2 ]

11 голосов
/ 07 октября 2011

Спецификация языка Java подробно описывает, что делает оператор foreach.См. «14.14.2 Расширенные операторы for» для получения дополнительной информации (http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.2). Но вкратце, фактически язык гарантирует, что выражение, по которому вы перебираете, будет оцениваться только один раз.

3 голосов
/ 07 октября 2011

Нет, это не так.Он сохраняет итеративный элемент, полученный из getIterable(), в памяти и использует эту ссылку.Быстрый способ проверить это поставить точку останова в операторе for и отладить свой путь к JDK.Вы узнаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...