2013-12-15 46 views
1

我想知道是给定值的局部变量时局部变量初始化错误

这就是为什么我得到一个错误的局部变量在以下情况下

int i=10; 
int j; 

if(i==10) 
{ 
j=100; 
} 
System.out.println(j);//error 

这里未初始化的编译器不够聪明即使在上面的行中明确地声明了i = 10;

,因为我觉得我没有给出在编译时价值我得到这个初始化错误

是给出10作为其在运行时的值我基本类型int?

+0

如果你知道'i'将会是'10',为什么要有'if'语句? –

+3

把'int i = 10'改成'final int i = 10',你就会知道。 –

+0

@Rohit @Rohit @Rohit我知道,因为它会是一个编译时间常量,编译器知道它的值,这就是我所要求的,因为我没有声明它是最终的,这意味着它在运行时被赋予了值,并且为什么编译器不确定是否if条件在编译时肯定是真的,这会导致错误 – unknown

回答

2

因为i是局部变量,int i=10在运行时执行,所以在编译时,编译器不知道那的i值,这样编译器不能确定if (i==10)必须是真实的,它只能承担两个条件。如果i不等于10,那么println将使用未初始化的j,这就是您得到该错误的原因。

+0

@Thanks埃文我也在想同样的多数民众赞成在为什么我明确地问我是否在运行时给予价值 – unknown

0

尝试删除if语句中的大括号。

+0

你希望通过这样做来实现什么? – Justin

+0

没什么,我只是想知道什么时候我给的价值,我认为它不是在编译时给出的,这就是为什么编译器无法评估是否如果陈述是真实的 – unknown

1

您必须在执行if语句之前初始化j。所有的局部变量都必须被定义和初始化。

在你的程序中,因为编译器不能识别i的值,所以i == 10是没有意义的,并给出错误。

+0

我知道谢谢你的关注:) – unknown