java - 在 java 中使用 while 循环时出现 Unreachable 语句错误

标签 java if-statement while-loop control-flow unreachable-statement

<分区>

Possible Duplicate:
Why is this code giving an “Unreachable Statement” error?

这个问题看起来很简单,我在一本书上找到了这个问题。如果有人帮我弄清楚为什么我会出错。

    do {
        System.out.print("inside do");
    } while (false);
    while (false) { // error
        System.out.print("inside while");
    }
    System.out.print("outside");

我想,据我所知,输出应该在inside dooutside。但是,它显示编译器错误:无法访问语句。然后,我试图弄清楚为什么它显示 Compilation error : Unreachable Statement* 。所以,我把上面的代码改成这样

  boolean i = false;  
  do {
        System.out.print("inside do");
    } while (false);
    while (i) { // ok
        System.out.print("inside while");
    }
    System.out.print("outside");

现在,它显示了预期的输出,即 inside dooutside 。所以,我的问题是 - 在第一种情况和第二种情况下有什么区别? 另外,当我检查

if(false){ 
  //something here
   }

然后,上面的代码执行没有任何错误。

最佳答案

前两个示例之间的主要区别在于,在第一种情况下,条件是一个常量,而在第二种情况下则不是。

例如,如果您将 boolean i = false; 更改为 final boolean i = false;,您将得到相同的编译错误,因为 i 现在是一个常量。

无法访问语句的规则在 JLS 14.21 中定义.特别是对 if 有特殊处理,以允许 if(DEBUG) 结构,其中 DEBUG 可能是常量。

至于do/while,里面的语句会执行一次,所以没有问题。

有关 this related post 中常量的更多详细信息.

关于java - 在 java 中使用 while 循环时出现 Unreachable 语句错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14000930/

相关文章:

java - 通过 maven 和 spring 使用 liquibase 文件路径

C-比较两个四位数字数组的函数

java - JavaFX 中 StackPane 上的 BufferedImage

java - 我应该使用单例作为程序状态吗?

java - "immediately completes normally"对 if 语句意味着什么?

php - 我应该用三元简写 if/else 替换我所有的 if/else 语句吗? (PHP)

c++ - Char数据类型输入问题

c - unsigned int 在 while 循环中的表现如何?

java - 为什么一个空的 Java 程序会消耗内存?

java - 抛出 IOException 而不是 Exception