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

Tin*_*iny 9 java loops if-statement

可能重复:
编译器抱怨"缺少返回语句",即使无法达到返回语句丢失的条件

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

public String temp() {
    while(true) {
        if(true) {
            // Do something.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public String tempNew() {
    if(true) {
        return "someString";
    }        
}
Run Code Online (Sandbox Code Playgroud)

发出编译时错误,指示" 缺少return语句 ",即使使用该if语句指定的条件始终为true(它具有boolean永远不会通过反射更改的常量).为了成功编译,必须修改该方法,如下所示.

public String tempNew() {
    if(true) {
        return "someString";
    } else {
        return "someString";
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

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

    return "someString";
}
Run Code Online (Sandbox Code Playgroud)

关于while循环的第一种情况,第二种情况似乎是合法的,尽管它无法编译.

在第二种情况下是否有一个原因超出了编译器的一个特性.

Rav*_*ale 3

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