【问题标题】:please explain, Why the below code is going to infinite loop请解释一下,为什么下面的代码会无限循环
【发布时间】:2020-01-13 04:40:49
【问题描述】:

为什么下面的代码会无限循环?为什么不抛出编译时错误?

public class Main {
    public static void main(String[] args) {
       for(;;){
           System.out.println("while loop");
       }
    }
}

【问题讨论】:

  • 因为它是合法的代码,它表示一个无限循环。
  • 一旦条件不满足(在 for 循环中的 first ; 之后),for 循环迭代就会停止。在上面的代码中,没有 Condition 可以统计,默认情况下为 true。所以这段代码会无限循环运行。
  • 另请参阅Java: for(;;) vs. while(true),以及为什么有些人更喜欢它stackoverflow.com/a/2611529(尽管此答案基于 C++)。

标签: java


【解决方案1】:

syntax of a basic for loop is:

BasicForStatement:
    for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement

ForInitExpressionForUpdate 周围的 [] 表示所有这些都是可选的。

因此,for (;;) { /* something */ } 是有效语法,因此不会导致编译时错误。

然后(强调):

如果表达式不存在,或者它存在并且值 其评估(包括任何可能的拆箱)产生的结果是 true,然后执行包含的语句。然后有一个 选择:

  1. 如果 Statement 的执行正常完成,则如下 两个步骤依次执行:

    • 首先,如果存在 ForUpdate 部分 [它不存在,所以省略它]

      如果 ForUpdate 部分不存在,则不采取任何措施

    • 第二,执行另一个迭代步骤

Expression 不存在,Statement 正常完成:因此执行另一个 for 迭代步骤。

这完全是一种说法:你有一个无限循环,因为没有什么可以阻止它继续执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 2020-07-12
    相关资源
    最近更新 更多