Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的每个循环都可以';不能用于作业_Java - Fatal编程技术网

java中的每个循环都可以';不能用于作业

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是一个局部变量,它是数组中引用的副本。您可以更改它,但它不会更改它来自的数组或集合。基

为什么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 (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();