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

时间:2011-10-11 15:41:40

标签: java loops foreach 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());
    }

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

5 个答案:

答案 0 :(得分:21)

这是它想要你使用的:

for (Object o : list)
{
    System.out.println(o.toString());
}

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

答案 1 :(得分:14)

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

for( Object obj : list ) {
  System.out.println( obj.toString() );
}

答案 2 :(得分:11)

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

  

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

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

答案 3 :(得分:2)

foreach循环写入时间更短,因此更容易阅读。

答案 4 :(得分:0)

然而,与 while 循环相比,Foreach 循环创建了一个匿名类并消耗更多内存,我建议忽略该建议并使用 while 循环来更好地优化您的代码的使用。