增强的 for 循环不适用于将值分配给数组(Java)[重复]

Posted

技术标签:

【中文标题】增强的 for 循环不适用于将值分配给数组(Java)[重复]【英文标题】:Enhanced for loop not working for assigning values to an array (Java) [duplicate] 【发布时间】: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;

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

【问题讨论】:

【参考方案1】:

您使用的增强型 for 循环:

 for(int element : array)
  element = 10;

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

    这里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循环。

【讨论】:

以上是关于增强的 for 循环不适用于将值分配给数组(Java)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

For循环分配溢出到另一个变量[重复]

将值分配给二维数组时的垃圾值

Cuda内核中的大型for循环不适用于大型数组[关闭]

将值从向量分配给动态数组(C++)

为什么将值分配给数组中的特定位置,将同一值分配给同一数组中的其他随机位置?

Numpy:将值分配给具有索引列表的二维数组