import java.util.*;
class CollectionDemo2
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
//代码1
Iterator it = al.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
/*
代码2
(while(al.iterator().hasNext())
{
System.out.println(al.iterator().next());
}
*/
}
}请问:用代码2替换代码1,为什么会无限输出java01?
class CollectionDemo2
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
//代码1
Iterator it = al.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
/*
代码2
(while(al.iterator().hasNext())
{
System.out.println(al.iterator().next());
}
*/
}
}请问:用代码2替换代码1,为什么会无限输出java01?
第二种写法,等于不停的取出新的Iterator,然后不停的循环
每调用一次al.iterator()都会返回一个新的Iterator对象。
每次执行al.iterator().next()就相当于每次都执行新Iterator对象的next()方法,所以只会输出第一个