SER*_*ich 5 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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您将局部变量String模型更改else if (price<=11)为else或初始化为某个随机值,则代码将成功编译.我在这个案例中的问题是"为什么?"
现在,这是一本书的问题,解释是:
"只声明局部变量模型,而不是初始化.变量模型的初始化放在if和else-if结构中.如果在if或else-if结构中初始化变量,编译器无法确定这些条件是否会被评估为真,导致没有初始化局部变量."
即使经过解释,我仍然不明白两件事,
Era*_*ran 11
model必须在System.out.println(model);语句之前初始化,以便代码通过编译.
编译器不分析if-else-if语句的条件以确定是否总是满足其中一个,因此无法确定if或else-if块是否总是被执行,因此它无法确定是否model会在println声明之前初始化.
当您使用if-else结构时,将执行if或else块,因此,由于它们都初始化model,因此保证在println语句之前初始化.