这是参照在编译器检查本地变量k
的初始化程序错误时确定分配的变量。变量的明确赋值
void flow(boolean flag) {
int k;
if (flag)
k = 3;
if (!flag)
k = 4;
System.out.println(k);
}
这段代码抛出一个编译错误:
k
needs to be initialized.
在下面的情况下,无论什么flag
变量的值时,k
变量的值将被分配。这个编译错误是否合理?
编译器不够聪明,如果你不使用'else',就知道你已经检查了两个标志条件。使用'else'。 –
更好的问题是,这段代码是否合理?你为什么要明确检查一个布尔值的两边? – shmosel
更好的版本是:'final int k = flag? 3:4;'一行而不是五,更好理解,作为一个加号,变量'k'是不可变的。 – vanje