繁体   English   中英

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

[英]enhanced for-loop behavior for handling collection object

因为我学习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循环的行为。

增强的for循环创建一个Iterator来迭代ArrayList的元素。 改变a引用来引用新ArrayList不影响Iterator ,是由环产生。

你的循环相当于

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

当你跑步

for(String str: a)

它从a获取一个迭代器,然后使用该迭代器进行迭代。 重新分配a它,因为它没有使用具有迭代器将没有任何效果后a参考,它使用了迭代器, a当循环开始返回。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM