Есть функция foo, которая возвращает массив bar. Будет ли одинакова последовательность работы у цикла foreach, если в качестве иттерируемого объекта передать foo и bar? Будет ли вызваться функция foo каждый раз или условно закешируется?
Ответ
Работать будет одинаково. При вызове for (Object a : foo()) {} у вас сначала один раз вызовется метод, по результату которого пойдёт итерирование.
foreach - всего лишь "синтаксический сахар" для создания итератора и дальнейшего его использования. Т.е. "под капотом" это:
Iterator it = foo().iterator();
while(it.hasNext()) {
it.next();
}
Комментариев нет:
Отправить комментарий