起因
在分析并發(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;