Java中在if语句中局部变量要初始化才能使用?

public static int fn(int index){
int result;
if(index==1||index==2){
result=1;
}else{//这里result未初始化一样可以用,但是如果改成}else if(index>0){就会报错result未初始化
result=fn(index-2)+fn(index-1);
}
return result;
}

你仔细看JAVA基础,JAVA局部变量都必须给初始值的,你用ELSE的语句话 ,Result 始终会在Return的时候初始化一个值,因为不是if 分支就是else分支。而你用Else If 语句的话,如果你输入的Index<0 就不会进入任何分支,所以你返回的时候编译器就认为语法错误。追问

有点明白,如果这个局部变量在return之前没有进行任何赋值操作,因为局部变量是没有默认值的,所以它在return的时候它的值是null?而返回值为int类型不允许返回null,是这样吧

追答

不是的,不管是原始类型还是引用类型,如果是局部变量的话,你始终都需要初始化一个值。你试想一下你声明了一个局部变量,他在内存中分配了一个临时空间,而该空间并没有填上任何东西,你又RETURN 回去,内存空间在系统里是随机分配的,你觉得这样的话合理么?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-11
是因为分支条件必须要考虑到所有的条件后才能正确处理result.
修改成public static int fn(int index){
int result;
if(index==1||index==2){
result=1;
}}else if(index>0){// 注意这里的修改
result=fn(index-2)+fn(index-1);
}
else{
result = "your name...";

}
return result;
这样就不会报错了.
}追问

为什么这样就不会报错?

追答

假设不是上述的if 和else if这两个条件,那么应该返回怎么的result.java编译器会查找对应的所有分支条件,确定最后的返回结果一定要有值.这是所有编程语言的共性.

本回答被网友采纳
相似回答