日期:2014-05-20  浏览次数:20649 次

成员变量和局部变量初始化的问题
public class TestSwitch{
public static void main(String args[]){
TestSwitch tni = new TestSwitch();
String s = tni.convert(4);
System.out.println(s);
}

public String convert(int n){
String day;//这里为什么可以不用初始化?难道day是成员变量吗
switch(n){
case 1: 
day = "星期一";
break;
case 2: 
day = "星期二";
break;
case 3: 
day = "星期三";
break;
case 4: 
day = "星期四";
break;
case 5: 
day = "星期五";
break;
case 6: 
day = "星期六";
break;
case 0: 
day = "星期日";
break;
default:
day = "非法";
break;
}
return day;
}
}

------解决方案--------------------
你把switch中的default去掉试试,或者只是把default中的day的赋值去掉就明白了。
switch中存在default情况,编译器能分析出你使用day之前肯定初始化了。

而循环的情况下,编译器不会分析循环是不是真正执行,并不能保证在输出result之前已经初始化了。
比如你写个
for(int i=1;i <=100;i++){ 
还是
for(int i=1;i <=0;i++){
对编译器的分析行为是没有影响的