【问题标题】: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;
在 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循环。