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不能用于初始化 任何 数组或Collection,因为它遍历数组或Collection的当前内容,一次为您提供每个 值
。for-each中的变量 不是 数组或Collection引用的代理。编译器不会用“
i” 替换您的“ ”(来自“
inti”)
array[index]。
例如,如果您有一个Date数组,请尝试以下代码:
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;}


