for循环如何工作,特别是(;;)?

时间:2011-08-16 16:11:51

标签: java loops syntax for-loop iteration

查看一些旧的公司代码,我遇到了一个看起来像这样的for循环:

for (;;) {
    //Some stuff
}

我试过Google但找不到任何答案。我是在编程课上睡着了还是这是一个不寻常的循环?

6 个答案:

答案 0 :(得分:84)

java中的for循环具有以下结构 -

for (initialization statement; condition check; update)
    loop body;

如您所见,这里有四个陈述 -

  1. 初始化语句:此语句仅在第一次输入循环时执行一次。这是一个可选语句,这意味着您可以选择将此字段留空。它通常用于某些初始化目的。
  2. 条件检查:此声明可能是最重要的声明。它检查以验证某个表达式是否计算为true。如果是,则循环执行继续。您可以选择将此字段保留为空,将其评估为true
  3. 更新:此语句列表从左到右执行,通常用于递增/递减某些变量。
  4. 循环体:循环体,将根据条件检查的真值反复执行。
  5. 基本上这是执行的方式 - 首先,当第一次进入循环时,初始化语句执行一次。然后执行条件检查以查看它是否被评估为真。如果是,则执行循环体,否则循环执行完成。之后,执行Update语句。接下来,再次执行条件检查,如果它的计算结果为true,则再次执行循环体,然后执行update语句,然后再次执行条件检查....你得到了图片。

    现在讲述您的for( ; ; )语法。它没有初始化语句,因此不会执行任何操作。它的条件检查语句也是空的,这意味着在执行循环体之后它的计算结果为true。接下来,由于update语句为空,因此不执行任何操作。然后再次执行条件检查,这将再次评估为真,然后整个过程将再次重复。

    所以你看,这基本上是一个无限循环,没有初始化语句,其条件检查将始终计算为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;
    

答案 1 :(得分:37)

这与:

相同
while(true) {
  //Some Stuff
}

基本上是无限循环的替代语法。

答案 2 :(得分:9)

这些都是无限循环

for(;;) {
   // endlessly
}

while(true) {
   // endlessly
}

do {
   // endlessly
} while(true);

答案 3 :(得分:6)

此循环没有保护并充当while(true)循环。它将无限循环直到休息。

答案 4 :(得分:3)

这是一个无限循环。不完全好的编码,因为它不直观,实际上编译或不抛出运行时错误。重写为while(true) { /* code */ }将更加可读,以表示无限循环。

答案 5 :(得分:2)

这是一个无限循环。初始化,条件和增量语句都是可选的,所以没有任何一个,这将永远循环(除非中断或其他一些构造与之交互)。

虽然我不确定Java,this question解释了如何在.Net中将空forwhile (true)编译成完全相同的东西。如果Java也这样做我也不会感到惊讶。