为什么for-java中的每个循环都不能用于赋值? 例如,我正在尝试以下示例,但未获得预期结果,但成功编译:
int count = 0;
String[] obj = new String[3];
for (String ob : obj )
ob = new String("obj" + count++);
System.out.println(obj[0]); // null
答案 0 :(得分:1)
ob
是一个局部变量,它是数组中引用的副本。你可以改变它,但它不会改变它来自的数组或集合。
答案 1 :(得分:1)
基本上,这是正确的。 for-each
loop 不适用于需要在遍历时替换列表或数组中的元素的循环
String[] obj = { "obj1", "obj2", "obj3" };
或强>
for (int count = 0; count < obj.length; count++) {
obj[count] = "obj" + count;
}
答案 2 :(得分:0)
正如您所指出的,您无法在数组迭代中使用该变量来设置数组的值。实际上,您的代码虽然合法,但在迭代数组元素以初始化它们时却很不寻常。正如其他答案所指出的那样,最好使用数组的索引。
更好的是在初始化过程中创建数组。例如,在Java 8中,您可以使用:
String[] obj = IntStream.range(0, 4).mapToObj(n -> "obj" + n).toArray();
在我看来,这是为了捕捉你创建字符串然后将它们变成一个新数组的意图,而不是创建一个数组然后迭代它来改变每个元素。