讨论一下:Java的for循环是怎样执行的?
public class Test {
public static void main(String[] args) {
List<Long> list = new ArrayList<Long>();
list.add(new Long(1);
list.add(new Long(2));
list.add(new Long(3));
list.add(new Long(4));
list.add(new Long(5));
for(Long l : list) {
System.out.println("run.");
list.remove(l);
}
}
}运行报错:
run.
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at com.lance.Test.main(Test.java:31)可见只循环了一次,第二次在for中判断是报错,可是我第一轮循环时仅remove了一个元素而已。
把for循环更改写法:
for(int i=0;i<list.size();i++) {
Long l = list.get(i);
list.remove(l);
System.out.println("run." + i + ", l=" + l + ", list.size():" + list.size());
}运行结果:
run.0, l=1, list.size():4
run.1, l=3, list.size():3
run.2, l=5, list.size():2
循环了3次,正确的,因为前面几次循环都remove掉元素,到最后一次size为2,可是i已经累加到3了。
如果for中写法变成
for(int i=0, ls=list.size();i<l;i++)没有每次重新读取list size,会出现下标越界。这也好理解。
只是像最前面的写法
for(Long l : list)
这种仅运行一次,第二次就报错了呢,报错的行数就是for的这一行,这时虚拟机在验证什么?
...全文
相关推荐
对java for 循环执行顺序的详解
今天小编就为大家分享一篇对java for 循环执行顺序的详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
java for循环与增强for循环
增强型的for循环 和普通for循环一样 增强型的for循环 优点主要体现在集合中,随便举个例子 比如对 set 的遍历 一般是迭代遍历
Java中for循环练习题
学习Java中for循环的知识点进行总结和归纳,让你学起来更加轻松!
Java 8跳过本次循环,继续执行以及跳出循环,终止循环的代码实例
今天小编就为大家分享一篇关于Java 8跳过本次循环,继续执行以及跳出循环,终止循环的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
java for循环的几种写法
java for循环的几种写法


Java SE
