为什么以下引发错误?
for(; 0 ;) System.out.println("guess"); // or
for(;false;) System.out.println("guess"); // or
for(; 1 ;) System.out.println("guess");
Run Code Online (Sandbox Code Playgroud)
但以下运行正常(无限):
for(;true;) System.out.println("guess");
Run Code Online (Sandbox Code Playgroud)
为什么它适用true但不适用false?
该条件(即间位;或多个)必须是一个布尔值,因此这立即在你的第一个片段排除了第一和第三个变种.
现在,第二个变体,在其中您已经使用一个布尔值,不编译因为编译器实现的循环将永远不会进入,从而发出错误:
Untitled.java:3: error: unreachable statement
for(;false;) System.out.println("guess");
^
1 error
请注意,JLS要求为无法访问的语句发出错误(参见§14.21):
如果由于无法访问语句而无法执行语句,则会发生编译时错误.
...
如果语句可访问且
for条件表达式不是值为的常量表达式,则可以访问包含的语句false.