增强的 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。
这里element
是type int
,也就是primitive
类型。即使
这是一个Integer
然后也是Integer
是immutable
你会
无法对对象进行任何修改,因为
修改总是会产生一个单独的对象。
如果某些自定义类的情况如下所示,请说Student.java
对于一些List<Student> 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)[重复]的主要内容,如果未能解决你的问题,请参考以下文章