为什么下面的代码会进行无限循环?为什么不抛出编译时错误?
public class Main {
public static void main(String[] args) {
for(;;){
System.out.println("while loop");
}
}
}
答案 0 :(得分:3)
syntax of a basic for loop is:
BasicForStatement: for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement
[]
,ForInit
和Expression
周围的ForUpdate
表示所有这些都是可选的。
正因为如此,for (;;) { /* something */ }
是有效的语法,所以不会导致编译时错误。
然后(强调):
如果不存在表达式,或者存在并且值为 经过评估(包括可能的拆箱),结果是 是,然后执行包含的语句。然后有一个 选择:
如果该语句的执行正常完成,则执行以下操作 依次执行两个步骤:
首先,如果存在ForUpdate部分[不存在,请省略此部分]
如果不存在ForUpdate部分,则不执行任何操作。
第二,执行另一个迭代步骤。
Expression
不存在,Statement
正常完成:因此要执行另一个迭代步骤。
这是一种说法:您有一个无限循环,因为没有什么可以阻止它继续执行。