为什么局部变量在if-else构造中启动而在if-else-if构造中不启动?

时间:2016-07-11 06:07:35

标签: java if-statement initialization

所以我们知道必须初始化局部变量才能在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;

即使在解释之后,我仍然无法理解两件事,

  1. 我不确定为什么变量模型会混淆编译器,因为无论使用什么型号,双倍价格都是11。
  2. 当你把else放在最后时,它如何神奇地初始化局部变量?

1 个答案:

答案 0 :(得分:11)

必须在model语句之前初始化

System.out.println(model);,以便代码通过编译。

  1. 编译器不分析if-else-if语句的条件以确定是否总是满足其中一个,因此无法确定if或else-if块是否为始终执行,因此无法确定model语句之前是否会println初始化。

  2. 当你使用if-else结构时,if或else块都会被执行,所以因为它们都初始化model,所以保证在{{1}之前初始化声明。