增强的 for 循环不适用于为数组赋值 (Java)



我不明白为什么我不能使用增强的 for 循环为数组的元素赋值。例如,像这样使用 for 循环

    int[] array = new int[5];
    for(int i = 0; i < 5; i++)
      array[i] = 10;

生产我想要的。但是为什么这不适用于"对于每个":

    for(int element : array)
      element = 10;

有什么具体的原因吗,或者我做错了什么?

在增强的 for 循环中,element是一个局部变量,其中包含对要迭代的数组或Iterable的当前元素的引用(如果是基元,则为值)。

分配给它不会影响数组/Iterable

它相当于:

int[] array = new int[5];
for(int i = 0; i < 5; i++) {
  int element = array[i];
  element = 10;
}

这也不会修改数组。

如果需要修改数组,请使用常规 for 循环。

您使用

的增强型 for 循环:

 for(int element : array)
  element = 10;
  1. 在java中,我们有引用对象的引用。一次一个引用只能引用一个对象。如果它被引用到另一个对象,那么它会丢失对前一个对象的引用。当您使用=时,您可以element引用另一个值,即 10。

  2. 这里elementtype int,这是primitive类型。便这是一个Integer,然后也是Integer immutable你会无法对对象进行任何修改,因为修改总是会导致一个单独的对象。

如果某些自定义类的情况如下,请说Student.java对于某些List<Student> students.

for(Student std : students){
    std.setName("eureka");
}

现在迭代列表并打印每个学生的姓名将有导致为每个学生打印尤里卡。但请注意,即使在这种情况下使用 = 也会再次产生与您现在得到的结果相同的结果(因为您将变量再次引用到不同的对象,它将不再引用列表的原始对象)。

最新更新