当前位置: 技术问答>java相关
scjp考题,请大家帮助一下。
来源: 互联网 发布时间:2015-09-26
本文导语: public class ABC { public static void main(String[] args) { int a, b, c; if(true) a = 2; if(2 == 2) b = 2; if(b == 2) c = 2; System.out.println(a+","+b+","+c); } } 为什么会提示c没有初始化? | 因...
public class ABC
{
public static void main(String[] args)
{
int a, b, c;
if(true) a = 2;
if(2 == 2) b = 2;
if(b == 2) c = 2;
System.out.println(a+","+b+","+c);
}
}
为什么会提示c没有初始化?
{
public static void main(String[] args)
{
int a, b, c;
if(true) a = 2;
if(2 == 2) b = 2;
if(b == 2) c = 2;
System.out.println(a+","+b+","+c);
}
}
为什么会提示c没有初始化?
|
因为c在if语句中
|
如果b != 2 时c 就没有被初始化
|
局部变量要求必须初始化.
|
全局变量系统自动初始化,
但是局部变量一定要自己初始化,否则要抛出异常!
但是局部变量一定要自己初始化,否则要抛出异常!
|
int c;
if(b==2){c = 2;}
因为b!=2,所以c未赋初值2而只是被申明。
if(b==2){c = 2;}
因为b!=2,所以c未赋初值2而只是被申明。
|
真的挺怪的。不知道为什么。
但是如果后面加个
else c=2;
就能正常编译运行了。
好象是局部变量即使附值了,放在if语句里也不会认为它有值,
我瞎乱说的。:)
但是如果后面加个
else c=2;
就能正常编译运行了。
好象是局部变量即使附值了,放在if语句里也不会认为它有值,
我瞎乱说的。:)
|
if(b == 2) c = 2;
后面加上 else c=2;就可以运行了
编译的时候 并不知道b==2为 true
但是 知道2==2为 true
后面加上 else c=2;就可以运行了
编译的时候 并不知道b==2为 true
但是 知道2==2为 true
|
if(b == 2) c = 2;
这句话不成立,c没被付值
所以提示没初始化。
这句话不成立,c没被付值
所以提示没初始化。
|
同意楼上的看法。这是编译机制的问题
|
编译器要确保局部变量必须被初始化,而编译器又没聪明到知道b就等于2,所以bcdavid(莉莉) 的说法是对的