Java 中的 for-each 循环不能用于赋值



为什么 java 中的 for-each 循环不能用于赋值? 例如,我正在尝试以下示例,但没有得到预期的结果,但编译成功:

int count = 0;
String[] obj = new String[3];
for (String ob : obj )
   ob = new String("obj" + count++);
System.out.println(obj[0]);    // null

ob 是一个局部变量,它是数组中引用的副本。 您可以更改它,但它不会更改它来自的数组或集合。

本质上,这是正确的。for-each 循环不适用于需要在遍历列表或数组时替换列表或数组中的元素的循环

String[] obj = { "obj1", "obj2", "obj3" };

for (int count = 0; count < obj.length; count++) {
    obj[count] = "obj" + count;   
}

如前所述,不能在数组迭代中使用变量来设置数组的值。事实上,你的代码虽然合法,但在迭代数组的元素以初始化它们方面是不寻常的。正如其他答案所指出的,您最好使用数组的索引。

更好的是在初始化过程中创建数组。例如,在 Java 8 中,您可以使用:

String[] obj = IntStream.range(0, 4).mapToObj(n -> "obj" + n).toArray();

在我看来,这似乎捕捉到了您创建字符串然后将它们转换为新数组的意图,而不是创建一个数组然后遍历它更改每个元素。

最新更新