起因
在分析并发问题的时候,想写一个错误的示例,就在for遍历的时候,调用list.remove(),此时应该抛出ConcurrentModificationException异常,但是奇怪的是它并没有抛出,我表示惊呆了。。。当时的代码如下:
@Testpublic void test_for_remove(){
List<String> list = new ArrayList<>(); list.add("aa"); list.add("bb"); for(String temp : list){ if("aa".equals(temp)){ list.remove(temp);
}
} /* for(int i=0;i<list.size();i++){
System.out.println(list.size());
list.remove(i);
}*/
list.forEach(System.out::println);
}深入理解原因
其实,这也因为对报错的原因不熟悉导致的,在此记录一下报错的原因。foreach的语法糖其实还是Iterator的方式。
private class Itr implements Iterator<E> { int cursor; // index of next element to return
int lastRet = -1; // index of last element returned;

