【问题标题】:Is there any point where While loop is better than For loop?While 循环是否比 For 循环更好?
【发布时间】:2013-06-28 05:58:29
【问题描述】:

我在Effective Java 中读过一篇文章,内容是关于更喜欢For 循环而不是While 循环。
For 循环比While 循环有很多优势。但是选择For 而不是While 有什么缺点吗?

【问题讨论】:

  • for 循环的优点是什么?
  • for 循环和while 循环是相同的。
  • 性能一样没关系。也许for 循环还有其他一些缺点?
  • @TheNewIdiot 这不是重复的,因为它不关注性能。它是关于书中写了什么以及为什么写的。阅读我的答案,因为变量可见性略有不同。

标签: java for-loop while-loop


【解决方案1】:

没有缺点。但是对于以下情况,使用 while 循环更为传统

bool condition = false;
while(!condition)
{

}

【讨论】:

  • 似乎真的没有缺点,因为只有一个不离题的答案。
【解决方案2】:

for 循环优于 while 循环的主要优点是可读性。 For 循环更干净,也更美观。使用while循环陷入无限循环也容易得多。我会说我同意你的知识,如果你可以使用 for 循环,你应该这样做,所以只要你坚持下去,你的编程体验会更加愉快。

【讨论】:

    【解决方案3】:

    第 45 条(在本书的第 2 版中)谈到了变量的范围。为了最小化局部变量的范围,while 循环有一个缺点:

    boolean condition = false;
    while (!condition) {
        // do stuff
    }
    // Here the variable condition still exists
    

    for 循环可以限制可见性

    for (boolean condition = false; !condition;) {
        // do stuff
    }
    // Here the variable condition is out of scope and can be garbage collected
    

    根据这本书,这就是最好的。

    【讨论】:

      【解决方案4】:

      For 循环被广泛使用,并且比 while 循环有更多的优势,但在某些情况下,while 循环是可取的
      案例一。
      当你在玩布尔值时。在这种情况下,如果您使用 for 循环,则明确定义要检查的变量,或者在这种情况下仅使用条件值创建 for 循环,而循环是可取的

      Boolean condition = false;
      while(!condition)
      {
          condition = doSomething();
      }
      

      比使用

      更可取
       Boolean condition = false;
       for(;condition;)
       {
           condition = doSomething();
       }
      


      案例 2.
      以获得更好的可见性和理解。在处理迭代器时,最好使用 while 循环,这样可以更清晰地查看代码。

      while (iterator.hasNext()) {
          String string = (String) iterator.next();
      }
      

      【讨论】:

        【解决方案5】:

        首先想到的是 for 循环的 JIT 优化更容易,因此更有可能被应用,即如果我们知道循环将执行的次数,那么我们就可以展开它。

        关于循环优化和 JIT 的一些讨论

        【讨论】:

          猜你喜欢
          • 2016-04-15
          • 1970-01-01
          • 2017-11-29
          • 1970-01-01
          • 2023-03-07
          • 2014-03-15
          • 2018-08-13
          • 2017-09-26
          • 1970-01-01
          相关资源
          最近更新 更多