Il ciclo for-each non funziona in questo caso. Non è possibile utilizzare un ciclo for-each per inizializzare un array. Il tuo codice:
int[] array = new int[5];
for (int i : array) {
i = 24;
}
si tradurrà in qualcosa di simile al seguente:
int[] array = new int[5];
for (int j = 0; j < array.length; j++) {
int i = array[j];
i = 24;
}
Se questo fosse un array di oggetti, sarebbe ancora sicuro. Fondamentalmente, per-ogni assegna ciascuna voce nella raccolta o matrice, a sua volta, alla variabile che fornisci, che puoi quindi lavorare con. La variabile è non equivalente a un riferimento di matrice. È solo una variabile.
for-each non può essere utilizzato per inizializzare qualsiasi matrice o un insieme, perché loop sui contenuti correnti della matrice o un insieme, dando ogni valore uno alla volta. La variabile in a for-each è non un proxy per un array o un riferimento alla raccolta. Il compilatore non sostituisce il tuo "i
" (da "int i
") con "array[index]
".
Se si dispone di una vasta gamma di data, per esempio, e provare questo, il codice:
Date[] array = new Date[5];
for (Date d : array) {
d = new Date();
}
sarebbe tradotto in qualcosa di simile a questo:
Date[] array = new Date[5];
for (int i = 0; i < array.length; i++) {
Date d = array[i];
d = new Date();
}
che come potete vedere sarà non inizializzare la matrice. Finirai con un array che contiene tutti i null.
NOTA: Ho preso il codice sopra, lo ho compilato in un file .class
e quindi ho utilizzato jad per decompilarlo. Questo processo mi dà il seguente codice, generato dal compilatore Sun Java (1.6) dal codice di cui sopra:
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;
}
L'altra domanda non dovrebbe essere un duplicato? Questo è stato il primo – masher