java中返回值return的一点疑问

我在书上看到这么一段:“下面的示例中逻辑上是正确的,但在编译时有错误,因为Java编译器认为该方法有可能不返回任何值”,其代码是:
public static int sign(int n) {
if(n>0) return 1;
else if(n==0) return 0;
else if(n<0) return -1;
}
为什么最后一句应该改成“else return -1”呢?虽然前两句判断了n的值是否大于等于0,我喜欢多此一举再次判断下n的值为什么会错了?
希望高手指点下,谢谢!

编译器并不像想象中的那么智能,虽然你的选择语句已经包括了n的所有取值情况,但是对于形如if……else if……的选择语句,只有最后以else结束,编译器才能肯定已经罗列了所有选择。
也可以这么理解,考虑下面的代码:
public static int sign(int n) {
if(n=1) return 1;
else if(n==2) return 0;
else if(n==3) return -1;
}
可以肯定这选择语句并没有罗列出所有情况,但是在编译器看来,这跟你本来写的没有区别,编译器不可能帮用户判断复杂的逻辑,它必须按照某种可以准确描述的规则来编译。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-09-12
典型的语法问题:
虽然你逻辑上覆盖了全部可能,但是JVM不会像我们一样思考,编译器考虑的是你的语法是否正确,参数是否得当

你看得句子里if else,得最后语法要求是以else结尾,但是你没有。所以编译器会认为你的判断不严谨,最后没有跳出这个语句结构。报错就是一定了。
第2个回答  2008-09-12
最后一句加了if的话,假如你根本就没进入这个判断呢?

就是说,假如你最后写的是n<-1,但是n=0,那不是就没有return咯?

所以,你要么在判断外写一个return,要么写一个return在else里面,这是编译器的防错机制
相似回答