在这段代码中,为什么我的数组不是按照我想要的那样初始化的?for-each循环是不是设计成这样做的,还是我只是没有正确使用它?
int[] array = new int[5]; //initialise array -> Doesn't work! Array still full of 0's for(int i : array) i = 24;
Eddie.. 15
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
"(从" int i
")替换为" 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(); }
你可以看到它不会初始化数组.最终将得到一个包含所有空值的数组.
注意:我使用上面的代码,将其编译成.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; }
Nikhil Chell.. 5
i
只是数组中该点的int副本,而不是对它的引用.在这种情况下,for-each循环不起作用.
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
"(从" int i
")替换为" 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(); }
你可以看到它不会初始化数组.最终将得到一个包含所有空值的数组.
注意:我使用上面的代码,将其编译成.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; }
i
只是数组中该点的int副本,而不是对它的引用.在这种情况下,for-each循环不起作用.