起因

在分析并發(fā)問題的時候,想寫一個錯誤的示例,就在for遍歷的時候,調(diào)用list.remove(),此時應(yīng)該拋出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);
}

深入理解原因

其實,這也因為對報錯的原因不熟悉導(dǎo)致的,在此記錄一下報錯的原因。foreach的語法糖其實還是Iterator的方式。

private class Itr implements Iterator<E> {    int cursor;       // index of next element to return
    int lastRet = -1; // index of last element returned;