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