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

标签 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 循环编译 & 运行,但第二个 for 循环编译失败并出现错误。它说 Unreachable Statement。第三个 for 循环编译 & 运行

最佳答案

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

这就像写作:

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

如您所见,条件始终为 true,并且没有任何改变。

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

参见第 14.21 章。 Unreachable Statements

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

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


关于 OP 更新:

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

关于java - 这个 java for 循环条件有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15458248/

相关文章:

java - GC后,对象在内存中的地址变了,为什么对象引用仍然有效?

java - 我的方法不允许我在遍历数组时留下 for 循环

c++ - 我在用 srand 在 C++ 中构建非重复随机数组时做错了什么?

c++ - 有没有一种方法可以通过 #define 列出在 c/c++ 中定义的符号

c++ - C 编译器出错,但 C++ 编译器不出错

c# - 从 SQL 语句中检索元数据(表名)

Java如何使用绘制圆弧并连接到另一个圆弧

Java:groupingBy子值作为值

JavaScript concat 没有按预期工作,需要详细说明吗?

java - 直接在单元测试代码中使用SOAPUI类的编译错误