La respuesta está en la especificación del lenguaje Java, no necesita descompilar :) Esto es lo que podemos leer sobre the enhanced for statement:
La mejorada de instrucción tiene la forma :
EnhancedForStatement:
for (VariableModifiersopt Type Identifier: Expression) Statement
La expresión debe tener el tipo Iterable
o debe ser de un tipo de matriz (§10.1), o se produce un error en tiempo de compilación.
El alcance de una variable local declarada en la parte FormalParameter de un mejorado for
declaración (§14.14) es la declaración contenida
El significado de la declaración mejorada for
está dada por la traducción a un for
declaración básica.
Si el tipo de Expression
es un subtipo de Iterable
, a continuación, dejar que I
ser el tipo de la expresión Expresión.iterator()
. La mejorada for
declaración es equivalente a un for
declaración básica de la forma :
for (I #i = Expression.iterator(); #i.hasNext();) {
VariableModifiersopt Type Identifier = #i.next();
Statement
}
Dónde #i
es una identificador generado por el compilador que es distinta de cualquier otro identificadores (compilador generado o de otra manera) que están dentro del alcance (§6.3) en el punto en que ocurre la declaración mejorada para .
lo contrario, la expresión necesariamente tiene un tipo de matriz, T[]
. Deje que L1 ... Lm
sea la secuencia (posiblemente vacía) de las etiquetas que preceden inmediatamente a la declaración mejorada de for
. Entonces el significado de la mejorada para declaración está dada por la siguiente declaración básica for
:
T[] a = Expression;
L1: L2: ... Lm:
for (int i = 0; i < a.length; i++) {
VariableModifiersopt Type Identifier = a[i];
Statement
}
Dónde un y i son generados por el compilador identificadores que son distintos de cualquier otro identificadores (generado por el compilador u otro) que están en el alcance en el punto donde se produce la sentencia mejorada para .
(La sintaxis del bucle for mejorado está un poco atrás.) –
No sé si estaría de acuerdo con llamar a esta optimización prematura. Es razonable querer entender qué está haciendo el compilador con su código. Tampoco tenemos idea de en qué punto de su proyecto (si está trabajando en un proyecto y no preguntando académicamente) lo está pidiendo. Podría ser al final. –
+1 para la pregunta. – user12458