El bucle for-each no funcionará en este caso. No puede usar un bucle for-each para inicializar una matriz. Su código:
int[] array = new int[5];
for (int i : array) {
i = 24;
}
se traducirá en algo como lo siguiente:
int[] array = new int[5];
for (int j = 0; j < array.length; j++) {
int i = array[j];
i = 24;
}
Si esto fuera una matriz de objetos, sería todavía fallan. Básicamente, cada uno asigna cada entrada en la colección o matriz, a su vez, a la variable que proporcione, con la que luego puede trabajar. La variable es no equivalente a una matriz de referencia. Es solo una variable.
Para cada-no puede ser utilizado para inicializar cualquier matriz o colección, porque se realiza un bucle sobre el contenido actual de la matriz o colección, dándole cada valor uno a la vez. La variable en for-each es no un proxy para una matriz o referencia de colección. El compilador no reemplaza su "i
" (de "int i
") con "array[index]
".
Si usted tiene una serie de fecha, por ejemplo, y de probar esto, el código:
Date[] array = new Date[5];
for (Date d : array) {
d = new Date();
}
se traduciría a algo como esto:
Date[] array = new Date[5];
for (int i = 0; i < array.length; i++) {
Date d = array[i];
d = new Date();
}
que como se puede ver la voluntad no inicializar la matriz. Usted terminará con una matriz que contiene todos los nulos.
NOTA: Tomé el código anterior, lo compilé en un archivo .class
, y luego usé jad para descompilarlo. Este proceso me da el siguiente código, generado por el compilador Sun Java (1.6) en el código anterior:
int array[] = new int[5];
int ai[];
int k = (ai = array).length;
for(int j = 0; j < k; j++)
{
int i = ai[j];
i = 5;
}
¿No debería la otra pregunta ser un duplicado? Esto fue primero. – masher