IntelliJ建议用for循环替换while循环.为什么?

Inv*_*ion 23 java foreach loops intellij-idea while-loop

    ArrayList<Object> list = new ArrayList<Object>();
    list.add(12);
    list.add("Hello");
    list.add(true);
    list.add('c');

    Iterator iterator = list.iterator();
    while(iterator.hasNext())
    {
        System.out.println(iterator.next().toString());
    }
Run Code Online (Sandbox Code Playgroud)

当我在IntelliJ IDEA中输入这个Java代码时,代码分析功能建议我用for循环替换while循环,因为我正在迭代一个集合.为什么是这样?

Jim*_*son 22

这是它想要你使用的:

for (Object o : list)
{
    System.out.println(o.toString());
}
Run Code Online (Sandbox Code Playgroud)

这是自Java 1.5以来的语言,并且是惯用模式.只有在需要访问迭代器的其他方法(即remove())时才需要Iterator .

  • 此代码不会修改任何内容.它不能抛出那个例外. (3认同)

Mas*_*sim 14

因为你不太可能犯错误而且看起来更好; )

for( Object obj : list ) {
  System.out.println( obj.toString() );
}
Run Code Online (Sandbox Code Playgroud)

  • 使用while循环,您必须自己处理迭代器,并且可能忘记获取下一个元素.使用for语法,您不能"忘记"它.你有一个循环,它将输出列表的每个元素一次.你不需要关心任何事情. (6认同)

Mat*_*att 11

因为你有检查Java语言迁移辅助 - 'while'循环可以用'for each'活动(这是默认的)替换,描述是

此检查报告循环,这些循环遍历集合或数组,并且可以用Java 5及更新版本中提供的"for each"迭代语法替换.设置Report java.util.List索引循环负责查找涉及list.get(索引)调用的循环.这些循环通常可以用foreach循环替换,除非它们在进程中修改底层列表,例如通过调用list.remove(index).如果是后者,foreach形式的循环可能会抛出ConcurrentModificationException.此检查仅报告项目或模块是否配置为使用5.0或更高的语言级别.

所以如果你不想被告知这个,那么在Inspections配置中取消选中该框