- 此问题在此处已有答案**:
Variable might not have been initialized in an if/else if statement(1个答案)
昨天关闭。
int outsideTem = 10;
String output;
if(outsideTem < 0){
//output = "Grab a coat";// i get an error if i comment out this line but why?
//System.out.println(output);
}
else if(outsideTem < 15){
output = "Grab a cardigan";
//System.out.println(output);
}
else{
output = "HOT!!!";
//System.out.println("HOT!!!");
}
System.out.println(output);
如果我注解掉if块中的变量,会得到一个错误。但是我之前尝试过初始化它,它是有效的。但是我不知道为什么
int outsideTem = 10;
String output = "";// tried this and it is working but not sure why
if(outsideTem < 0){
//output = "Grab a coat";// i get an error if i comment out this line but why?
//System.out.println(output);
}
else if(outsideTem < 15){
output = "Grab a cardigan";
//System.out.println(output);
}
else{
output = "HOT!!!";
//System.out.println("HOT!!!");
}
System.out.println(output);
2条答案
按热度按时间jk9hmnmh1#
是的,变量在使用之前需要初始化。您试图在print语句中使用变量。如果
outsideTemp
小于0
,并且该行被注解掉,您希望Java在该行中打印什么?但是,你不需要在
if
中初始化,你可以在声明变量时就已经初始化了。因此,以下方法可行:
dkqlctbz2#
我是否必须在Java的每个if else语句中初始化一个变量?
是的!但是只适用于
local
变量。一个局部变量在被引用之前必须被赋值。但是赋值可以发生在引用它的同一个语句中。在Java Language Specification中读Definite Assignment。这里是一些摘录。例16-1考虑语句和表达式结构的确定赋值
Java编译器识别出k在代码中被访问之前(作为方法调用的参数)被明确赋值:
因为只有当表达式的值:
为true,并且只有在执行了对k的赋值(更准确地说,是求值)时,该值才为true。
类似地,Java编译器将在代码中识别:
变量k由while语句明确地赋值,因为条件表达式True永远不会具有值False,所以只有break语句才能使while语句正常完成,并且k在break语句之前被明确地赋值。
必须被Java编译器拒绝,因为在这种情况下,就明确赋值规则而言,while语句不能保证执行其主体。