Pętla dla każdej pętli nie będzie działać w tym przypadku. Nie można użyć pętli for-each do zainicjowania tablicy. Twój kod:
int[] array = new int[5];
for (int i : array) {
i = 24;
}
przełoży się coś takiego, co następuje:
int[] array = new int[5];
for (int j = 0; j < array.length; j++) {
int i = array[j];
i = 24;
}
Gdyby to była tablicą obiektów, to nadal nie. Zasadniczo, dla każdego przypisuje się każdy wpis w kolekcji lub tablicy do zmiennej, którą podajesz, z którą możesz następnie pracować. Zmienna jest równa , a nie równoważna odwołaniu do tablicy. To tylko zmienna.
for-each nie może być używany do inicjacji żadnego tablicę lub Collection, ponieważ pętle ciągu bieżącej zawartości tablicy lub kolekcji, dając każdej wartości jeden naraz. Zmienna w jednostce jest , a nie proxy dla tablicy lub odwołania do zbioru. Kompilator nie zastąpi "i
" (od "int i
") za pomocą "array[index]
".
Jeśli masz tablicę data, na przykład, i spróbować tego, kod:
Date[] array = new Date[5];
for (Date d : array) {
d = new Date();
}
byłyby tłumaczone na coś takiego:
Date[] array = new Date[5];
for (int i = 0; i < array.length; i++) {
Date d = array[i];
d = new Date();
}
który jak widać będzie nie zainicjować tablicy. Otrzymasz tablicę zawierającą wszystkie wartości null.
UWAGA: Zrobiłem powyższy kod, skompilowałem go do pliku .class
, a następnie użyłem jad do jego dekompilacji. Ten proces daje mi następujący kod wygenerowany przez kompilator Sun Java (1.6) z powyższego kodu:
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;
}
Czy drugie pytanie nie powinno być duplikatem? To było pierwsze. – masher