4

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 循环编译运行,但第二个 for 循环compilation fails with error。它说Unreachable Statement。第三个 for 循环编译运行

4

4 回答 4

4

第一个循环是无限循环。由于条件始终为真,并且将始终被满足。

这就像写:

int i=0;
while(true)
   i++;

正如您所看到的,条件总是true如此,并且没有任何改变。

第二个循环是Unreachable code因为永远不会到达此循环下方的代码段(false始终为假,您永远不会更改它)。所以是多余的。

请参阅第 14.21 章。无法访问的语句

因为Java知道程序员是人类 :) 它会通知您这一点以防止错误。

请注意,while(false)您所拥有的第二个循环与if(false)...since while(false)(或您拥有的循环)不同是没有意义的,因为它下面的代码将不会被执行。不像if(false)那可能有else,所以在这种情况下编译器不会抱怨它。


关于OP更新:

在第三种情况下,不会出现编译错误,因为false值已分配给变量,在这种情况下,可以重新分配变量以使其具有true值。所以编译器不会出现错误。请注意,如果变量声明为,final那么编译器将出现错误,因为该变量永远不能分配给新值,因此for循环下面的代码将无法访问

于 2013-03-17T06:44:25.400 回答
0

在第二个for循环中,条件始终是false这样的for块(即使是空的)永远不会被执行(它是unreacheable)。

就像在这种情况下:

if (false) {
}
于 2013-03-17T06:45:24.097 回答
0
 for (int i = 0; <This_has_to_be_true>; i++)

for 循环的第二部分必须为真才能执行循环。由于您手动将其设置为始终为 fase,因此循环将永远不会运行,因此其中的代码无法访问。

于 2013-03-17T06:45:36.537 回答
0

编译器告诉你第二个循环内的代码(即使是空的)永远不会到达和执行,因为条件总是false.

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

于 2013-03-17T06:47:39.460 回答