所以我们知道必须初始化局部变量才能在if-else-if构造中使用。 例如,以下代码将无法编译。
public class Test {
public static void main (String...args){
double price= 11;
String model ;
if (price>10)
{model ="smartphone";}
else if (price<=11)
{model="not smart phone";}
System.out.println(model);
}
}
但是,如果将else if (price<=11)
更改为else
或将局部变量String模型初始化为某个随机值,则代码将成功编译。
在这种情况下我的问题是&#34;为什么?&#34;
现在,这是一本书的问题,解释是:
&#34;仅声明局部变量模型,而不是初始化。初始化 变量模型的变量放在if和else-if结构中。如果在if或else-if结构中初始化变量,则编译器无法确定这些条件是否将计算为true,从而导致无法初始化局部变量。&#34;
即使在解释之后,我仍然无法理解两件事,
答案 0 :(得分:11)
model
语句之前初始化 System.out.println(model);
,以便代码通过编译。
编译器不分析if-else-if语句的条件以确定是否总是满足其中一个,因此无法确定if或else-if块是否为始终执行,因此无法确定model
语句之前是否会println
初始化。
当你使用if-else结构时,if或else块都会被执行,所以因为它们都初始化model
,所以保证在{{1}之前初始化声明。