使用每个循环的“高级”在Java中初始化数组

是否可以使用’advanced’for循环在Java中初始化数组?

例如

Integer[ ] numbers = new Integer[20]; int counter = 0; for ( Integer i : numbers ) { i = counter++; } for ( Integer i : numbers ) { System.out.println(i); } 

这打印所有空值,为什么?

不,因为您没有分配给数组,所以您将分配给名为i的临时变量。 该arrays没有看到变化。

以下显示使用normal for循环的大致等效代码。 这应该可以更容易地了解为什么它无法更新数组:

 for (int j = 0; j < numbers.length; j++) { Integer i = arr[j]; // i is null here. i = counter++; // Assigns to i. Does not assign to the array. } 

您将null值作为输出的原因是您不在数组中存储任何值。

您可以使用foreach循环初始化数组,但是您必须手动维护计数器以引用数组元素:

 for (Integer i : numbers ){ numbers[counter] = counter; counter++; } 

显然,这不是foreach循环的预期用例。 为了解决您的问题,我建议使用“传统”for循环:

 for (int i = 0; i < numbers.length; i++){ numbers[i] = i; } 

注意,可以使用Arrays.fill(int [] array,int val)填充具有相同值的所有元素。

基本上没有,不是你想要的。 在’advanced’for循环中,无法访问隐藏的计数器,也没有在相应的arrays插槽上执行访问。

‘高级’for循环不会向您公开计数器,因此,您无法将counter++的结果写入特定的数组插槽。

你的情况是没有制作’高级’for循环的情况。 看到:

http://java.sun.com/j2se/1.5.0/docs/guide/language/foreach.html

看看最后一段。

在你的情况下,你不能。 For-each隐藏了底层集合上的迭代器,所以在这里你无法弄清楚当你尝试“初始化”数组时你当前在“数字”中的位置。 这是一个不使用“高级”循环的用例。