Java中阴险的List笔试题

来源:互联网 发布:淘宝网棉麻绣花女装 编辑:程序博客网 时间:2024/06/10 04:44
最近编程的时候发现的一个有趣的现象:
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的长度会发生变化,所以会发生异常,下次会出现在我的笔试题中。
0 0