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

时间:2010-12-30 11:03:45

标签: java if-statement

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

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

当我添加返回值时,它会以 “死代码” 的形式发出警告。那么,为什么不接受第一个test()方法

public boolean test(int i) {
   if (true) {
      return true;
    } else { //Dead code
      return false;
    }
 }

5 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:2)

这是编译器进行深度分析的结果。

答案 2 :(得分:1)

这个方法什么都不做,所以是的,它是死代码。如果该方法始终返回true,则无需调用它,只需使用true

答案 3 :(得分:1)

在Java中,如果指定返回类型(布尔值),则必须显式指定该值,而不管它是否始终相同。这确实提出了一个问题:如果总是一样的话,为什么要归还什么呢?您已经知道调用代码中的答案。

为什么不写:

public boolean test() {
  return true;
}

至于你问题的第二部分,编译器发现第二个路径从未在if语句中被采用,并且会给你一个警告。

答案 4 :(得分:0)

如果您测试某些内容,则可能是值或其他值。所以你不能保证会进入if语句。

if (someBoolean){
  return true;
}

将无效,因为someBoolean可以是true或false。 如果你的方法必须返回一些东西而someBoolean为false,它将不会返回任何内容。 所以在这种情况下,您可以这样做:

if (someBoolean){
  return true;
}

返回false;

或只是

return someBoolean;