起因

在分析并发问题的时候,想写一个错误的示例,就在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;
        
		

网友评论