java.lang.Error:未解决的编译错误:循环无法访问的代码

时间:2013-10-05 12:24:38

标签: java

我有以下代码行

boolean b = false;
for (int i = 0; b; i++) {}

执行得很好

现在,如果我用

替换上面的代码
for (int i = 0; false; i++) {}

它给出 - > java.lang.Error:未解决的编译问题:无法访问的代码

为什么呢?请帮忙。

4 个答案:

答案 0 :(得分:8)

基本上,您的第一个代码中的b不是编译时constant expression,而false则是final boolean b = false; 。如果将第一个代码中的布尔变量更改为:

b

它也无法编译,因为现在它是一个常量表达式,因为{{1}}的值以后不能更改。

答案 1 :(得分:4)

foreach循环的第二个参数是一个条件。当此条件为true时,循环将执行。如果您将false作为参数,它将永远不会执行,因此其中的代码无法访问。

第一个工作原理而第二个工作原因不是因为编译器没有检查b的值(或者不能充分推导它),但是当你清楚地使用{{1}时条件不明确。

答案 2 :(得分:2)

如果对条件使用变量,编译器不会抱怨,因为它不会检查执行到达循环时哪个值(这是运行时的工作),与硬编码false相反值。

答案 3 :(得分:0)

当然!由于错误的条件,循环体永远不会执行。结果,循环体和i ++确实无法访问。无论如何,这样做的意义何在?