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

Fra*_*ank 61 java iteration syntax loops for-loop

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

for (;;) {
    //Some stuff
}
Run Code Online (Sandbox Code Playgroud)

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

MD *_*med 87

一个for在Java循环结构如下-

for (initialization statement; condition check; update)
    loop body;
Run Code Online (Sandbox Code Playgroud)

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

  1. 初始化语句:此语句仅在第一次输入循环时执行一次.这是一个可选语句,这意味着您可以选择将此字段留空.它通常用于某些初始化目的.
  2. 条件检查:这个陈述可能是最重要的一个.它检查以验证某个表达式是否计算为true.如果是,则循环执行继续.您可以选择将此字段保留为空,将对其进行评估true.
  3. 更新:此语句列表从左到右执行,通常用于递增/递减某些变量.
  4. loop body:循环的主体,它将根据条件检查的真值重复执行.

基本上这是执行的方式 - 首先,当第一次进入循环时,初始化语句执行一次.然后执行条件检查以查看它是否被评估为真.如果是,则执行循环体,否则循环执行完成.之后,执行Update语句.接下来,再次执行条件检查,如果它的计算结果为true,则再次执行循环体,然后执行update语句,然后再次执行条件检查....得到图片.

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

所以你看,这基本上是一个无限循环,没有初始化语句,其条件检查将始终计算为true,并且没有更新语句.这相当于 -

while(true)
{
    .....
}
Run Code Online (Sandbox Code Playgroud)

这是java中另一种流行的循环结构.

当你使用这样的无限循环时,重要的是注意破坏条件,因为在大多数情况下你不能让循环无限期地运行.要打破这些类型的循环,您可以使用该break语句.结构如下 -

if(some_condition_is_true)
    break;        // This will cause execution to break out of its nearest loop
Run Code Online (Sandbox Code Playgroud)

要么

if(some_condition_is_false)
    break;
Run Code Online (Sandbox Code Playgroud)


Mar*_*elo 38

这与:

while(true) {
  //Some Stuff
}
Run Code Online (Sandbox Code Playgroud)

基本上,无限循环的替代语法.

  • 至少如果你使用while(true),阅读代码的人似乎更容易理解它... (4认同)
  • 我觉得他们有他们有用的时刻 (2认同)
  • 当你在5秒钟内解释它时,只是浪费了5分钟阅读接受的答案. (2认同)

Pet*_*rey 9

这些都是无限循环

for(;;) {
   // endlessly
}

while(true) {
   // endlessly
}

do {
   // endlessly
} while(true);
Run Code Online (Sandbox Code Playgroud)


Ara*_*yan 6

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

  • 或堆栈溢出 (13认同)
  • 还是回归!...〜 (5认同)