for-each 循环不适用于这种情况。您不能使用 for-each 循环来初始化数组。你的代码:
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-each 将集合或数组中的每个条目依次分配给您提供的变量,然后您可以使用该变量。该变量不等效于数组引用。它只是一个变量。
For-each 不能用于初始化 any 数组或 Collection,因为它循环遍历数组或 Collection 的当前内容,为您提供每个 value 一个时间。 for-each 中的变量不是数组或集合引用的代理。编译器不会用“array[index]”替换您的“i”(来自“int i”)。
如果你有一个日期数组,例如,试试这个,代码:
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();
}
如您所见,它不会初始化数组。你最终会得到一个包含所有空值的数组。
注意:我把上面的代码编译成.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;
}