Цикл for-each не будет работать для этого случая. Вы не можете использовать цикл for для каждого цикла для инициализации массива. Код:
int[] array = new int[5];
for (int i : array) {
i = 24;
}
переведут на что-то вроде следующего:
int[] array = new int[5];
for (int j = 0; j < array.length; j++) {
int i = array[j];
i = 24;
}
Если это массив объектов, он будет по-прежнему терпят неудачу. В принципе, для каждого присваивается каждая запись в коллекции или массиве, в свою очередь, переменной, которую вы предоставляете, с которой вы можете работать. Переменная не эквивалентна ссылке на массив. Это просто переменная.
For-каждый не может быть использован для инициализации любого массива или коллекции, так как он перебирает текущее содержимое массива или коллекции, давая вам каждый значение поштучно. Переменная in a for-each - , а не - прокси для массива или ссылки на собрание. Компилятор не заменяет ваш «i
» (от «int i
») с «array[index]
».
Если у вас есть массив даты, например, и попробовать это, код:
Date[] array = new Date[5];
for (Date d : array) {
d = new Date();
}
будет переведен на что-то вроде этого:
Date[] array = new Date[5];
for (int i = 0; i < array.length; i++) {
Date d = array[i];
d = new Date();
}
, который, как вы можете видеть, будет не инициализировать массив. Вы получите массив, содержащий все значения null.
ПРИМЕЧАНИЕ: Я взял код выше, скомпилировал его в файл .class
, а затем использовал jad, чтобы декомпилировать его. Этот процесс дает мне следующий код, созданный компилятором Sun Java (1.6) из приведенного выше кода:
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;
}
Разве другой вопрос не должен дублироваться? Это было первым. – masher