增强for循环的本质其实就是 Iterator
原代码:
for (String b : listB) {
System.out.println(b);
}
.class文件
Iterator var7 = listB.iterator();
while(var7.hasNext()) {
String b = (String)var7.next();
System.out.println(b);
}
所以如果在增强for循环中对集合进行操作,比如:
for (String b : listB) {
System.out.println(b);
listB.add("A");
}
就会报错
Exception in thread "main" 0
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.dzzchao.Main.main(Main.java:22)
如果在使用迭代器的过程中修改 List,将抛出 ConcurrentModificationException(),这就是所谓的 fail-fast 策略。
详见ArrayList源码:
//Iterator 的 next 方法
public E next() {
checkForComodification();
int i = cursor;
if (i >= size)
throw new NoSuchElementException();
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException();
cursor = i + 1;
return (E) elementData[lastRet = i];
}