【问题标题】:Enhanced for loop not working for assigning values to an array (Java) [duplicate]增强的 for 循环不适用于将值分配给数组(Java)[重复]
【发布时间】:2016-07-06 22:15:04
【问题描述】:

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

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

产生我想要的东西。 但是为什么这不适用于“for each”:

    for(int element : array)
      element = 10;

是否有任何具体原因导致这种情况或我做错了什么?

【问题讨论】:

    标签: java arrays loops for-loop


    【解决方案1】:

    您使用的增强型 for 循环:

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

    2. 这里elementtype int,也就是primitive类型。即使 这是一个Integer 然后也是Integerimmutable 你会 无法对对象进行任何修改,因为 修改总是会产生一个单独的对象。

    如果某些自定义类的情况如下所示,请说Student.java 对于一些List&lt;Student&gt; students.

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

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

    【讨论】:

      【解决方案2】:

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

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

      相当于:

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

      这也不会修改数组。

      如果需要修改数组,使用时应该使用常规的for循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-20
        • 1970-01-01
        • 2016-10-31
        相关资源
        最近更新 更多