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?

解决方案 »

  1.   

    不行的 ,这样你每次在调用while时,其实都在Iterator it = al.iterator();进行实例化,只是你在while中是隐形调用的,每次都打印第一次后,又是一个新的iterator了,所以这样不行的
      

  2.   

    第一种写法,取出Iterator ,然后循环一遍就完了。
    第二种写法,等于不停的取出新的Iterator,然后不停的循环
      

  3.   

    Iterator it = al.iterator();
    每调用一次al.iterator()都会返回一个新的Iterator对象。
    每次执行al.iterator().next()就相当于每次都执行新Iterator对象的next()方法,所以只会输出第一个