在这段代码中,为什么我的数组不是按照我想要的那样初始化的?for-each循环是不是设计成这样做的,还是我只是没有正确使用它?
int[] array = new int[5];
//initialise array -> Doesn't work! Array still full of 0's
for(int i : array)
i = 24;
Run Code Online (Sandbox Code Playgroud)
Edd*_*die 15
for-each循环不适用于这种情况.您不能使用for-each循环来初始化数组.你的代码:
int[] array = new int[5];
for (int i : array) {
i = 24;
}
Run Code Online (Sandbox Code Playgroud)
将翻译成以下内容:
int[] array = new int[5];
for (int j = 0; j < array.length; j++) {
int i = array[j];
i = 24;
}
Run Code Online (Sandbox Code Playgroud)
如果这是一个对象数组,它仍然会失败.基本上,for-each依次将集合或数组中的每个条目分配给您提供的变量,然后您可以使用该变量.该变量不等于数组引用.这只是一个变量.
For-each不能用于初始化任何数组或Collection,因为它遍历数组或Collection的当前内容,每次为您提供一个值.for-each中的变量不是数组或Collection引用的代理.编译器不会将" i"(从" int i")替换为" array[index]".
例如,如果您有一个Date数组,请尝试以下代码:
Date[] array = new Date[5];
for (Date d : array) {
d = new Date();
}
Run Code Online (Sandbox Code Playgroud)
会被翻译成这样的东西:
Date[] array = new Date[5];
for (int i = 0; i < array.length; i++) {
Date d = array[i];
d = new Date();
}
Run Code Online (Sandbox Code Playgroud)
你可以看到它不会初始化数组.最终将得到一个包含所有空值的数组.
注意:我使用上面的代码,将其编译成.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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2457 次 |
| 最近记录: |