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

时间:2018-03-20 12:07:55

标签: 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);
  }
 }

我猜到答案是

  

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

但答案是

  

1   2

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

3 个答案:

答案 0 :(得分:6)

增强的for循环会创建ps -ef来迭代Iterator的元素。更改ArrayList引用以引用新的a不会影响循环创建的ArrayList

你的循环等同于

Iterator

答案 1 :(得分:3)

运行时

<div class="skills">
  <ul id="loaded_skills">
    <li class="skills_selector current_selected_skill" value="3"> AJAX
      <input type="checkbox" name="skills" value="3" style="display:none">
      <a href="#">x</a>
    </li>
    <li class="skills_selector current_selected_skill" value="6"> Action Script 3.0 (Mac Version)
      <input type="checkbox" name="skills" value="6" style="display:none">
      <a href="#">x</a>
    </li>
  </ul>
</div>

它从for(String str: a) 获取一个迭代器,然后使用该迭代器进行迭代。在拥有迭代器之后重新分配a将没有任何效果,因为它没有使用a引用,它使用的是a在循环启动时返回的迭代器。

答案 2 :(得分:0)

这是因为增强的for循环使用了迭代器。因此,更改参考不会产生任何影响。 您可以查看不同的方案here