java.util.ConcurrentModificationException 未在预期时引发
下面的代码抛出一个 java.util.ConcurrentModificationException,如预期的那样:
public void test(){
ArrayList<String> myList = new ArrayList<String>();
myList.add("String 1");
myList.add("String 2");
myList.add("String 3");
myList.add("String 4");
myList.add("String 5");
for(String s : myList){
if (s.equals("String 2")){
myList.remove(s);
}
}
}
但是,下面的代码不会引发异常,而我希望它被抛出:
public void test(){
ArrayList<String> myList = new ArrayList<String>();
myList.add("String 1");
myList.add("String 2");
myList.add("String 3");
for(String s : myList){
if (s.equals("String 2")){
myList.remove(s);
}
}
}
不同之处在于,第一个列表包含 5 个项目,而第二个列表包含 3 个项目。使用的 JVM 是:
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
问题是:为什么第二段代码不抛出java.util.ConcurrentModificationException?