我不明白为什么我不能使用增强的 for 循环为数组的元素赋值。例如,像这样使用 for 循环
int[] array = new int[5];
for(int i = 0; i < 5; i++)
array[i] = 10;
生产我想要的。但是为什么这不适用于"对于每个":
for(int element : array)
element = 10;
有什么具体的原因吗,或者我做错了什么?
在增强的 for 循环中,element
是一个局部变量,其中包含对要迭代的数组或Iterable
的当前元素的引用(如果是基元,则为值)。
分配给它不会影响数组/Iterable
。
它相当于:
int[] array = new int[5];
for(int i = 0; i < 5; i++) {
int element = array[i];
element = 10;
}
这也不会修改数组。
如果需要修改数组,请使用常规 for 循环。
的增强型 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");
}
现在迭代列表并打印每个学生的姓名将有导致为每个学生打印尤里卡。但请注意,即使在这种情况下使用 =
也会再次产生与您现在得到的结果相同的结果(因为您将变量再次引用到不同的对象,它将不再引用列表的原始对象)。