我有以下代码行
boolean b = false;
for (int i = 0; b; i++) {}
执行得很好
现在,如果我用
替换上面的代码for (int i = 0; false; i++) {}
它给出 - > java.lang.Error:未解决的编译问题:无法访问的代码
为什么呢?请帮忙。
答案 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 ++确实无法访问。无论如何,这样做的意义何在?