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

发布于 2024-12-09 10:01:39 字数 402 浏览 1 评论 0原文

    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 代码时,代码分析功能建议我将 while 循环替换为 foreach 循环,因为我正在迭代集合。这是为什么呢?

    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());
    }

When I enter this Java code in IntelliJ IDEA, the code analysis feature suggests that I replace the while loop with a for each loop since I'm iterating on a collection. Why is this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

梦忆晨望 2024-12-16 10:01:39

这就是它希望您使用的内容:

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

自 Java 1.5 以来,这一直存在于该语言中,并且是惯用模式。仅当您需要访问迭代器的其他方法(即 remove())时才需要迭代器。

This is what it wants you to use:

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

This has been in the language since Java 1.5, and is the idiomatic pattern. You need the Iterator only if you need access to the iterator's other methods (i.e. remove()).

↙温凉少女 2024-12-16 10:01:39

因为你犯错误的可能性较小,而且看起来更好; )

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

Because you are less likely to make mistakes and it looks better ; )

for( Object obj : list ) {
  System.out.println( obj.toString() );
}
绝不放开 2024-12-16 10:01:39

因为您有检查 Java 语言迁移辅助工具 - 'while' 循环可替换为 'for every' 活动(这是默认值),所以描述为

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

因此,如果您不想被告知这一点,请取消选中检查配置中的该框

because you have the inspection Java Language Migration Aids - 'while' loop replaceable with 'for each' active (which is the default), description is

This inspection reports for loops which iterate over collections or
arrays, and can be replaced with the "for each" iteration syntax,
available in Java 5 and newer. The setting Report java.util.List
indexed loops is responsible for finding loops involving
list.get(index) calls. These loops generally can be replaced with the
foreach loops, unless they modify underlying list in the process, e.g.
by calling list.remove(index). If latter is the case, foreach form of
loop may throw ConcurrentModificationException. This inspection only
reports if the project or module is configured to use a language level
of 5.0 or higher.

so if you don't want to be told this then uncheck that box in the Inspections config

七婞 2024-12-16 10:01:39

foreach 循环编写起来更短,因此更容易阅读。

The foreach loop is shorter to write and thus easier to read.

小伙你站住 2024-12-16 10:01:39

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

The Foreach Loop however creates an anonymous class and consumes more memory compared to while loop, i would suggest to ignore the suggestion and use the while loop for better and optimized use of your code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文