在浏览一些旧公司代码时,我遇到了一个for循环,看起来像这样:
for (;;) {
//Some stuff
}
我试了谷歌,但找不到任何答案。我是在编程课上睡着了还是这是个不寻常的循环?
java中的for
循环具有以下结构-
for (initialization statement; condition check; update)
loop body;
如您所见,这里有四个语句—
- Initialization语句:该语句只在第一次进入循环时执行一次。这是一个可选语句,意味着您可以选择保持此字段为空。它通常用于一些初始化目的。
- 条件检查:这个语句可能是最重要的一个。它进行检查以验证某个表达式的计算结果是否为true。如果是,则循环继续执行。您可以选择将此字段保留为空,该字段将被计算为
true
。 - Update:这个语句列表从左到右执行,通常用于增加/减少一些变量。
- 循环体:循环体,它将根据条件检查的真值反复执行。
基本上是这样执行的——首先,当第一次进入循环时,执行一次初始化语句。然后执行条件检查,看看它的值是否为true。如果是,则执行循环体,否则循环执行结束。之后,执行Update语句。接下来,再次执行条件检查,如果结果为true,则再次执行循环体,然后执行update语句,然后再次执行条件检查....你懂的。
现在关于你的for( ; ; )
语法。它没有初始化语句,因此不会执行任何操作。它的条件检查语句也是空的,这意味着在执行循环体之后,它的计算结果为true。接下来,由于update语句为空,因此不执行任何操作。然后再次执行条件检查,其结果将再次为true,然后整个过程将再次重复。
所以你看,这基本上是一个没有初始化语句的无限循环,它的条件检查总是为true,也没有更新语句。这相当于-
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 */ }
将更易于阅读,以指示无限循环。
这是一个无限循环。初始化语句、条件语句和增量语句都是可选的,所以如果没有这些语句,this将总是再次循环(除非碰到break或其他结构与它交互)。
虽然我不确定Java,这个问题解释了如何在。net中你的空for
和while (true)
将被编译成完全相同的东西。如果Java也这样做,我不会感到惊讶。