【问题标题】:Java: What is "for (;;)" [duplicate]Java:什么是“for (;;)” [重复]
【发布时间】:2011-02-22 17:34:14
【问题描述】:

谁能帮我解释一下这个指令: 对于 (;;)

我遇到过几种这样的标记(比如在 facebook 的 ajax 代码和 Java 的并发代码中)。

【问题讨论】:

  • #define EVER ;; for(EVER) //...

标签: java


【解决方案1】:

无限循环。

for 循环 (for(x; y; z)) 的三个部分中的每一个都是可选的。

所以你可以这样做:

int i = 0;
for (; i < 20; ++i)

它完全有效,或者

for (int i = 0; i < 20;) { ++i; }

for (int i = 0; ; ++i) { if (i < 20) { break; } }

它们都是有效的。

您也可以省略所有三个部分,for(;;)。然后你有一个循环:

  • 不进行初始化(第一部分)
  • 没有条件停止(中间部分)
  • 每次迭代后什么都不做(最后一部分)

所以基本上是一个无限循环。它只是做它在循环体中所说的,一次又一次

【讨论】:

  • 请参阅 Java 语言规范 §14.14.1.2 java.sun.com/docs/books/jls/third_edition/html/… 以供参考:“如果 Expression 不存在,或者它存在并且其评估产生的值 (包括任何可能的拆箱)是true,然后执行包含的语句。“
  • 这个答案几乎证明了“没有问题太简单”政策的真棒。 :)
【解决方案2】:

这是一个无限循环。 for语句的具体说明见here

【讨论】:

    【解决方案3】:

    这是一个无限循环,类似于

    while(true)
    {
        ...
    }
    

    【讨论】:

      【解决方案4】:

      这是一个无限循环,因为(不存在的)退出条件永远不会为假。

      任何没有退出条件的 for 循环都是无限的:

      for (int x=0; ; x++) { }
      

      while (true) 完全相同,但恕我直言,可读性稍差。

      【讨论】:

        【解决方案5】:

        for 循环的语法是

        for (init-stmt; condition; next-stmt) {
        
        }
        

        所以它只是一个没有初始语句、下一个语句或条件的 for 循环。退出条件的缺失使其无限。

        【讨论】:

          【解决方案6】:

          这确实是一个无限循环。但是在 Java 中,您应该更喜欢 while (true) 而不是 for (;;),因为它更具可读性(您可能已经意识到)。无论如何,编译器都会对其进行优化。在 JavaScript 中,没有编译器,HTTP 上的每个字节都很重要,这就是为什么 for (;;) 是首选的原因。它节省了几个字符(字节)。

          【讨论】:

          • +1 以提高while (true) 的可读性
          • 我发现for(;;) 更具可读性。
          猜你喜欢
          • 2019-04-24
          • 2012-05-18
          • 2021-05-31
          • 1970-01-01
          • 1970-01-01
          • 2020-10-03
          • 1970-01-01
          • 2015-09-12
          • 2016-05-14
          相关资源
          最近更新 更多