最近编程的时候发现的一个有趣的现象:
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
for (int i = 0; i < 5; i++) {
list.add("a" + i);
}
List<String> tempList = list;
String str = "a0";
for (String path : list) {
if (path.contains(str)) {
tempList.remove(path);
}
}
System.out.println(list.size());
}
}
请问控制台输出的是什么?
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at test.sdzn.general.Test.main(Test.java:18)
分析:list在赋值的时候是同一块存储空间,所以list赋值给tempList的时候tempList变化会引起list的变化,而remove的时候tempList的长度会发生变化,所以会发生异常,下次会出现在我的笔试题中。