0

我有以下几行代码

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

它执行得很好

现在,如果我将上面的代码替换为

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

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

为什么?请帮忙。

4

4 回答 4

8

基本上b在您的第一个代码中不是编译时常量表达式,而是false。如果您将第一个代码中的布尔变量更改为:

final boolean b = false;

它也将无法编译,因为现在它是一个常量表达式,因为b以后无法更改值。

于 2013-10-05T12:28:21.760 回答
4

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

第一个有效而第二个无效的原因是因为编译器没有检查 的值(或不能充分推导它)b,但是当您明确使用false该条件时并不模棱两可。

于 2013-10-05T12:25:51.827 回答
2

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

于 2013-10-05T12:27:22.820 回答
0

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

于 2013-10-05T12:29:55.347 回答