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