处理集合对象的增强的for循环行为

Nam*_*kla 4 java

因为我学习Java ..我遇到了以下代码

public static void main(String[] args) {
  ArrayList<String> a = new ArrayList<>();
  a.add("1");
  a.add("2");
  for(String str: a){
  a = new ArrayList<>();
  System.out.println(str);
  }
 }
Run Code Online (Sandbox Code Playgroud)

我猜到了答案

1 null(因为引用现在指向另一个对象)

但答案是

1 2

我无法理解增强for循环的行为.

Era*_*ran 6

增强的for循环创建了一个Iterator迭代的元素ArrayList.更改a引用以引用new ArrayList不会影响Iterator循环创建的引用.

你的循环相当于

Iterator<String> iter = a.iterator();
while (iter.hasNext()) {
    String str = iter.next();
    a = new ArrayList<>();
    System.out.println(str);
}
Run Code Online (Sandbox Code Playgroud)