我有以下几行代码
boolean b = false;
for (int i = 0; b; i++) {}
它执行得很好
现在,如果我将上面的代码替换为
for (int i = 0; false; i++) {}
它给出了-> java.lang.Error:未解决的编译问题:无法访问的代码
为什么?请帮忙。
我有以下几行代码
boolean b = false;
for (int i = 0; b; i++) {}
它执行得很好
现在,如果我将上面的代码替换为
for (int i = 0; false; i++) {}
它给出了-> java.lang.Error:未解决的编译问题:无法访问的代码
为什么?请帮忙。
基本上b
在您的第一个代码中不是编译时常量表达式,而是false
。如果您将第一个代码中的布尔变量更改为:
final boolean b = false;
它也将无法编译,因为现在它是一个常量表达式,因为b
以后无法更改值。
foreach 循环的第二个参数是一个条件。当此条件为true
时,循环将执行。如果您false
作为参数给出,它将永远不会执行,因此其中的代码无法访问。
第一个有效而第二个无效的原因是因为编译器没有检查 的值(或不能充分推导它)b
,但是当您明确使用false
该条件时并不模棱两可。
如果您对条件使用变量,编译器不会抱怨,因为它不会检查执行到达循环时将具有哪个值(这是运行时的工作),这与硬编码false
值相反。
当然!由于错误条件,循环体将永远不会执行。结果,循环体和 i++ 确实无法访问。无论如何,这样做有什么意义?