Java: “for (;;)" 是什么意思?

10

请问有人能为我解释一下这个指令的含义:for (;;)

我在 Facebook 的 AJAX 代码和 Java 的并发编程中遇到过几种这样的写法。


3
#define EVER ;; 是一个C语言宏定义,它的作用是定义一个无限循环。for(EVER) //... 的意思是使用这个无限循环来实现某些功能。 - Andrew
6个回答

23

一个无限循环。

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 节 http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.1.2,如果 表达式 不存在,或者它存在且其评估结果的值(包括任何可能的取消装箱)为 true,则执行包含的 语句 - Adam Rosenfield
9
这个回答充分证明了“没有问题太简单”的政策是多么的棒! :) - Bill the Lizard

6

这是一个无限循环。有关 for 语句的具体规范,请参见此处


5
那是一个无限循环,类似于
while(true)
{
    ...
}

2

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

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

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

这与while (true)完全相同,尽管在我看来略微不太易读。


2
一个for循环的语法是:
for (init-stmt; condition; next-stmt) {

}

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

2

这确实是一个无限循环。但在Java中,你应该真正偏爱while (true)而不是for (;;),因为它更易读(你可能已经意识到了)。编译器会对其进行优化。在JavaScript中没有编译器的手段,每个字节都会通过HTTP传输,这就是为什么首选for (;;)的原因。它可以节省一些字符(字节)。


+1 用于 while (true) 的可读性 - whiskeysierra
我认为 for(;;) 更易读。 - jalf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接