增强的for循环无法为数组赋值(Java)

时间:2016-03-20 12:12:14

标签: java arrays loops for-loop

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

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

生产我想要的东西。 但是为什么这对于&#34;

并不适用于&#34;

    for(int element : array)
      element = 10;

为什么会出现这种情况或我做错了什么具体的原因?

2 个答案:

答案 0 :(得分:9)

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

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

它相当于:

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

这也不会修改数组。

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

答案 1 :(得分:0)

您使用的增强型for循环:

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

  2. 此处elementtype int,属primitive类型。即使 它是Integer,然后Integer也是immutable 无法对对象进行任何修改 修改总是会产生一个单独的对象。

  3. 如果某些自定义类的情况如下所示Student.java 对于某些List<Student> students.

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

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