1
for (int i = 0; (boolean)true; i++) {
}
2
for (int i = 0; (boolean)false; i++) {
}
3
boolean t=false;
for (int i = 0; t; i++) {
}
第一个for循环编译& 运行,但第二个用于循环compilation fails with error
。它说Unreachable Statement
。第三个循环编译& 运行
答案 0 :(得分:4)
第一个循环是无限循环。由于条件始终为真,并且始终满足。
就像写作:
int i=0;
while(true)
i++;
正如您所看到的,条件总是true
,并且没有任何改变。
第二个循环是Unreachable code
,因为永远不会到达此循环下面的代码段(false
始终为false而您永远不会更改它)。所以这是多余的。
见第14.21章。 Unreachable Statements 强>
由于Java
知道程序员是人类:)它通知你这是为了防止错误。
请注意while(false)
或您与if(false)...
的第二个循环不同while(false)
(或您拥有的循环)没有意义,因为它下方的代码将会不执行。与可能if(false)
的{{1}}不同,因此在这种情况下编译器不会抱怨它。
关于OP更新:
在第三种情况下,由于else
值已分配给变量,因此不会出现编译错误,在这种情况下,可以重新分配变量以使其具有false
值。因此编译器不会出现错误。
请注意,如果变量声明为true
,则编译器将出现错误,因为此变量永远不会分配给新值,因此final
循环下面的代码将无法访问< / em>的
答案 1 :(得分:0)
在第二个for
循环中,条件始终为false
,因此for
块(即使为空)将永远不会被执行(它是unreacheable
)。
就像这种情况一样:
if (false) {
}
答案 2 :(得分:0)
for (int i = 0; <This_has_to_be_true>; i++)
for循环的第二部分必须为true才能执行循环。由于您手动将其设置为fase,因此循环将永远不会运行,因此其中的代码无法访问。
答案 3 :(得分:0)
编译器告诉你第二个循环内的代码(即使为空)将从不到达并执行,因为条件总是false
。