Java 爪哇:什么是;对于(;)”而言;

Java 爪哇:什么是;对于(;)”而言;,java,Java,请任何人为我解释一下这个说明: 对于(;;) 我遇到过几种这样的标记(比如facebook的ajax代码和Java的并发代码)。这是一个无休止的循环。有关For语句的说明,请参阅。这是一个无限循环,类似于 while(true) { ... } 这是一个无限循环,因为(不存在的)退出条件永远不会为假 没有退出条件的任何for循环都是无限的: for (int x=0; ; x++) { } 与while(true)完全相同,但可读性稍差。无限循环 for循环的三个部分(for(x;y

请任何人为我解释一下这个说明: 对于(;;)


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

这是一个无休止的循环。有关
For
语句的说明,请参阅。

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

while(true)
{
    ...
}

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

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

for (int x=0; ; x++) { }
while(true)
完全相同,但可读性稍差。

无限循环

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

所以你可以这样做:

int i = 0;
for (; i < 20; ++i)
inti=0;
对于(;i<20;++i)
它是完全有效的,或者

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

(inti=0;;++i){if(i<20){break;}} 它们都是有效的

您还可以使用(;)省略所有三个部分。然后你有一个循环:

  • 不进行初始化(第一部分)
  • 没有停止的条件(中间部分)
  • 每次迭代后不执行任何操作(最后一部分)

所以基本上是一个无止境的循环。它只是按照它在循环体中所说的去做,一次又一次,这确实是一个无限循环。但是在Java中,您应该更喜欢(;;)的
while(true)
而不是
,因为它更可读(您可能已经意识到)。无论如何,编译器都会对其进行优化。在JavaScript中没有编译器,HTTP上的每个字节都计数,这就是为什么(;;)
首选
for(;;)
的原因。它可以保存几个字符(字节)。

for循环的语法为

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

}

因此,它只是一个for循环,没有初始语句、下一个语句或条件。缺少退出条件使其无限大。

请参阅Java语言规范§14.14.1.2以获取参考:“如果表达式不存在,或者表达式存在且其计算结果(包括任何可能的取消装箱)为
true
,则执行包含的语句。”这个答案几乎证明了“没有问题太简单”政策的可怕性+对于
while(true)
的可读性,我发现
for(;)
更具可读性;;永远。。。
for (init-stmt; condition; next-stmt) {

}