在迭代它时更改列表引用不会更改其中的值

时间:2016-03-29 06:42:03

标签: java

我更改了列表引用并将其指向整个新列表,同时迭代它但仍然打印旧值。

这可能看起来不正确,为什么有人想在迭代它时更改列表本身引用本身但迭代正在进行而另一个功能更改引用本身或创建新对象并将其分配给原始列表。

for (String s : lst) {
 System.out.println("list is:"+lst);
 System.out.println(s);
 lst = lst1;
}

这仍然会在一次迭代后打印旧列表。

2 个答案:

答案 0 :(得分:0)

在这种情况下,

for循环隐式地使用list的迭代器而不是列表。因此,更改列表的链接无效,您仍然隐式使用旧的迭代器。

请参阅此The For-Each Loop和此How does the Java for each loop work?

答案 1 :(得分:0)

在for-each循环中,对于第一次迭代本身,获取列表的迭代器。这是因为for-each循环的内部处理机制,它是在编译本身期间定义的。因此,如果您只是为新实例分配列表引用,则不会影响迭代器。