【发布时间】:2011-10-28 05:20:37
【问题描述】:
查看一些旧的公司代码,我发现了一个看起来像这样的 for 循环:
for (;;) {
//Some stuff
}
我尝试了 Google,但找不到任何答案。我是在编程课上睡着了还是这是一个不寻常的循环?
【问题讨论】:
标签: java loops syntax for-loop iteration
查看一些旧的公司代码,我发现了一个看起来像这样的 for 循环:
for (;;) {
//Some stuff
}
我尝试了 Google,但找不到任何答案。我是在编程课上睡着了还是这是一个不寻常的循环?
【问题讨论】:
标签: java loops syntax for-loop iteration
java 中的for 循环具有以下结构 -
for (initialization statement; condition check; update)
loop body;
如你所见,这里有四个语句——
true。基本上这就是执行的方式——首先,当第一次进入循环时,初始化语句执行一次。然后执行条件检查以查看它是否评估为真。如果是,则执行循环体,否则循环执行结束。之后,执行更新语句。接下来,再次执行条件检查,如果结果为真,则再次执行循环体,然后执行更新语句,然后再次执行条件检查......你得到了图片。
现在谈谈你的for( ; ; ) 语法。它没有初始化语句,因此不会执行任何操作。它的条件检查语句也是空的,这意味着它在执行循环体之后评估为真。接下来,由于更新语句为空,因此不执行任何操作。然后再次执行条件检查,再次评估为真,然后整个过程将再次重复。
所以你看,这基本上是一个无限循环,它没有初始化语句,其条件检查将始终评估为真,并且没有更新语句。这相当于 -
while(true)
{
.....
}
这是java中另一种流行的循环结构。
当您使用这样的无限循环时,请务必注意中断条件,因为在大多数情况下,您不能让循环无限期地运行。要打破这些循环,您可以使用break 语句。结构如下——
if(some_condition_is_true)
break; // This will cause execution to break out of its nearest loop
或
if(some_condition_is_false)
break;
【讨论】:
这与:
while(true) {
//Some Stuff
}
基本上,无限循环的另一种语法。
【讨论】:
这些都是无限循环
for(;;) {
// endlessly
}
while(true) {
// endlessly
}
do {
// endlessly
} while(true);
【讨论】:
这个循环没有保护并且作为一个while(true)循环。它将无限循环直到中断。
【讨论】:
这是一个无限循环。不完全是好的编码,因为它不直观,实际上会编译或不会引发运行时错误。重写为while(true) { /* code */ } 将更具可读性以指示无限循环。
【讨论】:
这是一个无限循环。初始化、条件和增量语句都是可选的,因此如果没有它们,这将始终再次循环(除非遇到中断或其他构造与之交互)。
尽管我不确定 Java,this question 解释了如何在 .Net 中将空的 for 和 while (true) 编译为完全相同的内容。如果 Java 也能做到这一点,我不会感到惊讶。
【讨论】: