因为第二段的 if (x > 100) myString = "x is greater than 100"; else myString = "fdfdf"; if+else组合保证了不管x取什么样的值,myString都可以得到赋值,所以不会报错按你的程序,其实第三段也可以保证不管x取什么值,myString也可以得到赋值,但这种结构编译器应该是没有办法估计你的if所覆盖的范围的,如果在中间加一句,变成: if (x < 100) myString = "x is less than 100"; x = 90; if (x >= 100) myString = "x is greater than 100"; 这样的话,myString就有可能漏过去
class Test { public static void main(String[] args) { String myString;//这里没有初始化,这个你明白 int x = 100;
if (x < 100) myString = "x is less than 100"; if (x > 100) myString = "x is greater than 100";
System.out.println(myString.length()); } } 程序这样的时候会保:局部变量没有初始化的编译错误.但是象下面这样: class Test { public static void main(String[] args) { String myString;//查找下面有没用初始化,运行下去 int x = 100;
if (x < 100) myString = "x is less than 100";//这个不成立
if (x > 100) myString = "x is greater than 100";//这个不成立 else myString = "fdfdf"; //初始化了,其实系统就这样默认怎么都有初始化 System.out.println(myString.length());//发现上面初始化了,不报错 } } 程序可以正常编译运行!然后再改一个条件变成下面这样: class Test { public static void main(String[] args) { String myString; int x = 100;
if (x < 100) myString = "x is less than 100";//系统会认为这两个条件不成立 if (x >= 100) myString = "x is greater than 100";//那么myString就没有初始化
if (x > 100) myString = "x is greater than 100";
else myString = "fdfdf";
if+else组合保证了不管x取什么样的值,myString都可以得到赋值,所以不会报错按你的程序,其实第三段也可以保证不管x取什么值,myString也可以得到赋值,但这种结构编译器应该是没有办法估计你的if所覆盖的范围的,如果在中间加一句,变成:
if (x < 100) myString = "x is less than 100";
x = 90;
if (x >= 100) myString = "x is greater than 100";
这样的话,myString就有可能漏过去
String myString = "";
如果只有if没有else,则编译器会认为myString的赋值可能没有进行。
当同时使用if和else时,必然保证myString被初始化,但用两个if则未必.
{
public static void main(String[] args)
{
String myString;//这里没有初始化,这个你明白
int x = 100;
if (x < 100) myString = "x is less than 100";
if (x > 100) myString = "x is greater than 100";
System.out.println(myString.length());
}
}
程序这样的时候会保:局部变量没有初始化的编译错误.但是象下面这样:
class Test
{
public static void main(String[] args)
{
String myString;//查找下面有没用初始化,运行下去
int x = 100;
if (x < 100) myString = "x is less than 100";//这个不成立
if (x > 100) myString = "x is greater than 100";//这个不成立
else myString = "fdfdf"; //初始化了,其实系统就这样默认怎么都有初始化
System.out.println(myString.length());//发现上面初始化了,不报错
}
}
程序可以正常编译运行!然后再改一个条件变成下面这样:
class Test
{
public static void main(String[] args)
{
String myString;
int x = 100;
if (x < 100) myString = "x is less than 100";//系统会认为这两个条件不成立
if (x >= 100) myString = "x is greater than 100";//那么myString就没有初始化
System.out.println(myString.length());
}
}
同样会报没有初始化的错误,为什么第二段就不算没有初始化呢???????那位高手能够讲讲具体的道理!谢谢
//要知道编译器只是进行编译,不是进行运行,她有其内部检测机制,那些if什么的,她不管你成不成立
//她假设了你成立或者不成立,就这个道理.编译器假设你的俩个if都没成立,那么你就没初始化
但是编译器还是不能判断出来的。
要奔星?
那照顾一下多给点分?
要奔星?
那照顾一下多给点分?全部给他我没意见
要奔星?
那照顾一下多给点分?全部给他我也没意见还差多少呢