为什么在Java中使用if语句发出错误,即使它总是如此?

时间:2012-10-20 17:28:09

标签: java loops if-statement

  

可能重复:
  Compiler complains about “missing return statement” even though it is impossible to reach condition where return statement would be missing

Java中的以下方法编译得很好。

public String temp() {
    while(true) {
        if(true) {
            // Do something.
        }
    }
}

该方法有一个显式的返回类型,java.lang.String没有return语句,虽然它编译得很好。但是,以下方法无法编译。

public String tempNew() {
    if(true) {
        return "someString";
    }        
}

发出编译时错误,指示“缺少return语句”,即使使用if语句指定的条件始终为true(它具有{{1永远不会被反射改变)。为了成功编译,必须修改该方法,如下所示。

boolean

public String tempNew() {
    if(true) {
        return "someString";
    } else {
        return "someString";
    }
}

关于public String tempNew() { if(true) { return "someString"; } return "someString"; } 循环的第一种情况,第二种情况似乎是合法的,尽管它无法编译。

第二种情况是否有理由超出编译器的一个特性。

2 个答案:

答案 0 :(得分:3)

因为它是死代码。死代码分析是在方法返回分析的单独传递中完成的,它进行了一些更深入的分析,查看分支条件。

答案 1 :(得分:1)

从java教程: 您可以使用while语句实现无限循环,如下所示:

while (true){
    // your code goes here
}

所以编译器知道这是无限的,因此可能不会返回 - 即不一定需要返回语句。

另一方面,if (true)行(在它自己的行上)将返回,因此需要覆盖所有返回的分支。