Обратите внимание, что при использовании для каждого цикла, даже для массивов. Фактически, это может дать небольшое преимущество в производительности над обычным для цикла в некоторых случаях, поскольку он вычисляет предел индекс массива только один раз.
EnhancedForStatement:
for ( VariableModifiersopt Type Identifier: Expression) Statement
а затем:
T[] a = Expression;
L1: L2: ... Lm:
for (int i = 0; i < a.length; i++) {
VariableModifiersopt Type Identifier = a[i];
Statement
}
Это (в псевдокоде) эквивалент расширенного цикла for для массивов. И ясно, что выражение оценивается один раз, а результирующий массив присваивается T[] a.
Таким образом, совершенно безопасно использовать даже сложные выражения в расширенном для оператора цикла.
Ответ 3
Нет.
Цикл for - это просто синтаксический сахар. Он ведет себя по-другому в зависимости от того, применяется ли он к аргументу Array или к объекту, реализующему интерфейс Iterable.
Для объектов Iterable цикл расширяется примерно так:
Iterator<ArrayElement> iter = iterableObject.iterator();
while (iter.hasNext()) {
ArrayElement e = iter.next();
// do smth
}
В действительности ваш примерный код выглядит примерно так:
Object[] temp = Method.returnArray();
for ( int i = 0; i < temp.length; i++ ) {
ArrayElement e = (ArrayElement) temp[i];
// do smth
}
Ответ 4
Нет, он будет вызываться один раз. Это не похоже на условие завершения стандарта для цикла, которое оценивается на каждой итерации.
Ответ 5
Нет, я так не думаю. Я бы заметил это "на производстве" (с плохими выступлениями) с тех пор.