下面是一个示例方法:
boolean method(int value, boolean check1, boolean check2) {
String code;
boolean valueIncorrect = false;
boolean otherIncorrect = false;
if (value < 0 || value > 10) {
code = "lengthCode";
valueIncorrect = true;
}
if (check1) {
code = "otherCode";
otherIncorrect = true;
} else if (check2) {
code = "otherCode";
otherIncorrect = true;
}
if(!valueIncorrect && !otherIncorrect) {
return true;
}
if (otherIncorrect) {
return code.contains("HELLO");
}
return true;
}
当我试图编译时,在我试图调用CONTAINS()方法的行处得到错误:variable code might not have been initialized
.
如果我们看一下逻辑,在那个点上代码不可能为空,对吗?还是我说错了?只有当其中一个布尔值为真时,执行才会达到该点,并且无论它们中的任何一个被设置为真,代码的值也都被设置.
因此,我不期望编译器进行无限复杂的分析,但我也知道,如果它是一个简单得多的条件:
if(boolean) code = "x";
else code = "y";
return code.contains("whatever");
这样就不会抛出错误.我误解了什么?