while (list.iterator().hasNext())的错误
近日,整理工作包下的警告出现了以下失误,让同事大大地鄙视了一把。
我将很多
for (Iterator<String> it = list.iterator(); it.hasNext();)
{String str = (String) it.next();}
改成了
while (list.iterator().hasNext()) {
String str = (String) list.iterator().next();}
这个问题反映了我对for循环和Iterator接口理解不够深刻。
很明显,问题的关键就在于忽略了:前一段代码中String str = (String) it.next();这句代码执行时不仅会返回游标右边的元素还会把游标移动到下一个位置。而后者list.iterator()不会发生变化,没有循环机制,只要判断list.iterator()游标右边有元素就会一直执行,造成死循环。