为什么编译器无法识别我的返回语句?

use*_*686 3 java string methods logic boolean

我有以下代码块:

public static boolean isReverse (String s1, String s2) {    
    if((s1.length()==1)&&s2.length()==1) {          
        if(s1.equals(s2)) {             
            return true;
        }
    }       
    else if(s1.charAt(0)==s2.charAt(s2.length()-1)) {           
        return isReverse(s1.substring(1, s1.length()-1),s2.substring(0, s2.length()-2));
    }       
    else return false;  
}
Run Code Online (Sandbox Code Playgroud)

我理解通常你需要一个return语句来涵盖if语句都不成立的可能性.这就是为什么我有else return false最后,但我仍然得到错误"必须返回类型布尔的结果".以下是我使用它的电话:

public static void main(String[] args) {
    if(isReverse("Java", "avaJ")) {
        System.out.println("worked");
    }
}
Run Code Online (Sandbox Code Playgroud)

GBl*_*ett 5

在第if一个中,有可能没有返回声明:

if((s1.length()==1)&&s2.length()==1) {
    //What if this is not true?
    if(s1.equals(s2)) {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这个块中如果s1不相等s2那么它将跳出if并且由于最后一个return false;链接到else块,它将到达方法的结尾而没有任何返回.

else return false简单地说,而不是解决这个问题return false;