'for'循环中的错误是什么?

Moh*_*ber 2 java for-loop

为什么以下引发错误?

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

ars*_*jii 8

条件(即间位;或多个)必须是一个布尔值,因此这立即在你的第一个片段排除了第一和第三个变种.

现在,第二个变体,在其中您已经使用一个布尔值,不编译因为编译器实现的循环将永远不会进入,从而发出错误:

Untitled.java:3: error: unreachable statement
        for(;false;)     System.out.println("guess");
                         ^
1 error

请注意,JLS要求为无法访问的语句发出错误(参见§14.21):

如果由于无法访问语句而无法执行语句,则会发生编译时错误.

...

如果语句可访问且for条件表达式不是值为的常量表达式,则可以访问包含的语句false.

  • @MarounMaroun那是值得商榷的.如果我正在设计编译器,我可能会发出警告,但我确信还有一个案例可以使它成为一个错误. (2认同)