Java 什么';是';对于';环
为什么以下情况会引发错误Java 什么';是';对于';环,java,for-loop,Java,For Loop,为什么以下情况会引发错误 for(; 0 ;) System.out.println("guess"); // or for(;false;) System.out.println("guess"); // or for(; 1 ;) System.out.println("guess"); 但以下各项运行正常(无限): 为什么它适用于true,而不适用于false?条件(即;s之间的位)必须是布尔值,因此这会立即排除第一个代码段中的第一个和第三个变体 现在
for(; 0 ;) System.out.println("guess"); // or
for(;false;) System.out.println("guess"); // or
for(; 1 ;) System.out.println("guess");
但以下各项运行正常(无限):
为什么它适用于true
,而不适用于false
?条件(即;
s之间的位)必须是布尔值,因此这会立即排除第一个代码段中的第一个和第三个变体
现在,第二个变量(您在其中使用了布尔值)没有编译,因为编译器意识到将永远不会输入循环,因此发出错误:
Untitled.java:3: error: unreachable statement
for(;false;) System.out.println("guess");
^
1 error
Untitled.java:3:error:unreachable语句
对于(;false;)System.out.println(“猜测”);
^
1错误
请注意,JLS要求对无法访问的语句发布错误(请参阅): 如果由于无法访问语句而无法执行该语句,则为编译时错误。 如果
for
语句是可访问的,并且条件表达式不是值为false
的常量表达式,则包含的语句是可访问的
Java需要一个布尔值作为循环头中的第二个参数,它对语句求值,如果语句返回true,jvm将运行循环体的代码,而不是跳过循环体 0和1显然不是布尔值,也没有定义可以计算的语句(如x
编辑:如果您提供“false”作为语句,JVM将注意到循环体永远无法到达,这将导致运行时错误 与C不同,在Java中,
true
和false
对应于boolean
类型值,其中1和0到int
(事实上,在C中没有boolean
声明类型,布尔检查是基于整数比较完成的。在Java中,事情是不同的)。;是的代码>始终为true,并且是有效条件false
永远不会为真,因此无效。其余的都是不言自明的。for(;;)
作为一个无限循环工作,too@AliAkber我建议您仔细阅读for循环()。正如它所说:当终止表达式的计算结果为false时,循环终止
,因此您的循环甚至不会执行,因为它已经终止了。@marounnaroun这是有争议的。如果我在设计编译器的话,我可能会给它一个警告,但我确信也有理由让它成为一个错误;虚假的代码>Java中的错误?刚在C#中测试过,它编译得很好,但它确实提供了一个警告,说明里面的代码无法访问(这是显而易见的)。@DrewKennedy是的,这是Java中的一个错误,可能是由于不断传播。@ElliottFrisch这是我的猜测。看起来很聪明,因为它是一个错误,无论如何都是完全无用的。这违反了JLS,对吗?编译良好:if(false)System.out.println(“jls糟透了!”)
这也适用:for(boolean b=false;b;b=false)System.out.println(“多么愚蠢的规则!”)代码>
Untitled.java:3: error: unreachable statement
for(;false;) System.out.println("guess");
^
1 error