Согласно JLS :
Расширенный оператор for имеет форму:
EnhancedForStatement: for ({VariableModifier} UnannType VariableDeclaratorId: Expression) Statement
EnhancedForStatementNoShortIf: for ({VariableModifier} UnannType VariableDeclaratorId: Expression) StatementNoShortIf
Java foreach l oop или расширенный оператор for переводится в оператор basi * 1037 следующим образом:
- Если тип
Expression
является подтипом Iterable<X>
для некоторого аргумента типа X, тогда пусть I
будет типом java.util.Iterator<X>;
в противном случае, пусть I
будет необработанный тип java.util.Iterator.
Расширенный оператор for эквивалентен оператору basi c for в форме:
for (I #i = Expression.iterator(); #i.hasNext(); ) {
{VariableModifier} TargetType Identifier =
(TargetType) #i.next();
Statement
}
В противном случае
Expression
обязательно имеет тип массива,
T[]
.
Расширенный оператор for эквивалентен оператору basi c for в форме:
T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
{VariableModifier} TargetType Identifier = #a[#i];
Statement
}