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

时间:2016-02-12 01:30:36

标签: java

为什么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

3 个答案:

答案 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();

在我看来,这是为了捕捉你创建字符串然后将它们变成一个新数组的意图,而不是创建一个数组然后迭代它来改变每个元素。