【问题标题】:What is wrong with this java for loop condition?这个 java for 循环条件有什么问题?
【发布时间】:2013-03-17 06:42:27
【问题描述】:

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 循环 编译 & 运行

【问题讨论】:

  • 现在,如果你在boolean t=false; 前面添加final,它将不会再次编译。这完全取决于编译器可以保证什么。

标签: java for-loop compiler-errors


【解决方案1】:

第一个循环是无限循环。因为条件是总是为真,并且总是会被满足。

这就像写作:

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 用于更新(我正要添加)。一个简单的可能是双循环。
【解决方案2】:
 for (int i = 0; <This_has_to_be_true>; i++)

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      就像在这种情况下:

      if (false) {
      }
      

      【讨论】:

        猜你喜欢
        • 2014-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多