项目中发现一个bug,经过一段时间的摸索,发现问题出在一个List上,虽然问题比较简单,但是觉的还是有一定的参考价值,平时要多做写单元测试
大楷是这样的一个程序(模拟)
public class ListTest {
public static void main(String[] args) {
// TODO 自动生成方法存根
List l = new ArrayList();
l.add(new String("one"));
l.add(new String("two"));
l.add(new String("three"));
l.add(new String("test"));
List l1 = l;
Iterator it = l1.iterator(); // bug 根源
for ( int i = 0 ; i< l.size();i++){
String temp = (String)l.get(i);
if(temp.equals("test"))
l1.remove(temp);
}
while ( it.hasNext() ) {
System.out.println((String)it.next());
}
}
}
这段程序编译时没有问题,运行时即抛出java.util.ConcurrentModificationException
原因是在生成l1的迭代器,后面的程序又移除了某个对象,造成对象集合的不一致。