这个java for循环条件有什么问题?

时间:2013-03-17 06:42:28

标签: java for-loop compiler-errors

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。第三个循环编译& 运行

4 个答案:

答案 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

顺便说一下,你为什么要这样做呢?