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

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循环编译失败出现错误。它显示不可达语句。第三个for循环编译运行


2
现在,如果你在 boolean t=false; 前面加上 final,它就不会再次编译。这完全取决于编译器能够保证什么。 - Bhesh Gurung
4个回答

4
第一个循环是无限循环。因为条件始终为真,并且将始终被满足。
这就像写下:
int i=0;
while(true)
   i++;

如您所见,条件始终为true,且没有任何改变这个真实值的操作。
第二个循环是Unreachable code,因为下面的代码块永远不会被执行(false始终为假,且您从未更改它)。所以这段代码是多余的。
请参阅第14.21章。 Unreachable Statements 由于Java知道程序员是人类:),它会提示您这一点以避免错误。
请注意,while(false)或您所拥有的第二个循环与if(false)…不同,因为while(false)(或您所拥有的循环)没有意义,因为它下面的代码将不会执行 ,而if(false)可能有else,所以编译器在这种情况下不会抱怨它。
关于OP更新的说明:
第三种情况中不会出现编译错误,因为变量被赋予了false值,在这种情况下,该变量可以重新分配一个true值。因此编译器不会引起错误。 请注意,如果将变量声明为final,则编译器将引发错误,因为该变量永远不可能被分配给新值,因此for循环下面的代码是无法到达的

1
+1 对于这个更新(我正要添加它)非常赞同。一个简单的解决方案可能是使用双重循环。 - dreamcrash

0
在第二个 for 循环中,条件始终为 false,因此 for 块(即使为空)将永远不会被执行(它是 unreacheable)。
就像在这种情况下:
if (false) {
}

0
 for (int i = 0; <This_has_to_be_true>; i++)

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

0
编译器告诉你第二个循环内的代码(即使是空的)永远不会被执行,因为条件始终为“false”。
顺便问一下,你为什么要这样做呢?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接