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

2022-09-02 03:36:36

是否可以使用“高级”for 循环在 Java 中初始化数组?

例如:

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

    for ( Integer i : numbers )
    {
        System.out.println(i);
    }

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


答案 1

否,因为您没有分配给数组,所以您正在分配给名为 的临时变量。数组看不到更改。i

下面显示了使用普通循环的大致等效代码。这应该可以更容易地了解为什么它无法更新数组: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.
}

答案 2

获取 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) 用相同的值填充所有元素。