为什么方法需要在语句之后返回值,该值始终返回true?

7 java if-statement

为什么这个方法(测试)需要一个返回值(它总是如此)?

public boolean test() { //This method must return a result of type boolean
    if (true) {
       return true; // always return true
    }
}
Run Code Online (Sandbox Code Playgroud)

当我添加返回值时,它会警告为"死代码".那么,为什么不接受第test()一种方法

public boolean test(int i) {
   if (true) {
      return true;
    } else { //Dead code
      return false;
    }
 }
Run Code Online (Sandbox Code Playgroud)

the*_*oop 11

方法返回分析不分析if条件以查看它是否总是真或假,因为通常它不是编译时常量(否则你不会首先编写一个if).它只是看到有一个if可以或不可以采取,如果没有采取,那么该方法不返回值,因此错误.

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

我完全不知情的猜测是这种行为是编译器如何开发的人工制品; 方法返回分析是编译的重要部分,以确保最终获得有效的程序,因此是首先实现的核心功能之一.死代码分析是一个"很好",所以后来使用更复杂的算法实现(因为核心编译器位由该阶段完成)