小编典典

在Java中使用while循环无法实现的语句错误[重复]

java

这个问题似乎很简单,我在一本书中发现了这个问题。如果有人帮助我弄清楚为什么我出错了。

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

我认为,根据我的看法,输出应该 在dooutside内部* 。但是,它显示了 编译器错误:Unreachable Statement
。然后,我试图找出原因,它显示了 **编译错误: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");

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

if(false){ 
  //something here
   }

然后,以上代码将正确执行。


阅读 545

收藏
2020-11-26

共1个答案

小编典典

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

例如,如果您更改boolean i = false;final boolean i = false;,则由于我现在是一个常数,因此将得到相同的编译错误。

JLS
14.21
中定义了不可达语句的规则。特别是if对允许常量的if(DEBUG)结构进行了特殊处理DEBUG

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

2020-11-26