java中的每个循环都可以';不能用于作业
为什么java中的for-each循环不能用于赋值? 例如,我正在尝试下面的示例,但没有得到预期的结果,但编译成功:java中的每个循环都可以';不能用于作业,java,Java,为什么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是一个局部变量,它是数组中引用的副本。您可以更改它,但它不会更改它来自的数组或集合。基
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 (int count = 0; count < obj.length; count++) {
obj[count] = "obj" + count;
}
for(int count=0;count
如您所述,不能在数组迭代中使用变量来设置数组的值。事实上,虽然您的代码是合法的,但在迭代数组元素以初始化它们时却是不寻常的。正如其他答案所指出的,最好使用数组的索引
更好的方法是在初始化过程中创建数组。例如,在Java 8中,您可以使用:
String[] obj = IntStream.range(0, 4).mapToObj(n -> "obj" + n).toArray();
在我看来,这似乎是为了捕捉您创建字符串然后将其转换为新数组的意图,而不是创建一个数组然后在其中迭代更改每个元素。字符串是不可变的我们需要在每次迭代中为obj分配值:obj[count]=ob;计数++;
String[] obj = IntStream.range(0, 4).mapToObj(n -> "obj" + n).toArray();