起因

在分析并發(fā)問題的時(shí)候,想寫一個(gè)錯(cuò)誤的示例,就在for遍歷的時(shí)候,調(diào)用list.remove(),此時(shí)應(yīng)該拋出ConcurrentModificationException異常,但是奇怪的是它并沒有拋出,我表示驚呆了。。。當(dāng)時(shí)的代碼如下:

@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);
}

深入理解原因

其實(shí),這也因?yàn)閷?duì)報(bào)錯(cuò)的原因不熟悉導(dǎo)致的,在此記錄一下報(bào)錯(cuò)的原因。foreach的語法糖其實(shí)還是Iterator的方式。

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

網(wǎng)友評(píng)論