为什么一个简单的布尔值的 if/else if/else 没有给出“无法访问的代码”错误

2022-08-31 16:44:03

为什么此代码未给出“无法访问的代码”错误?因为布尔值只能是真或假。

public static void main(String args[]) {
    boolean a = false;
    if (a == true) {

    } else if (a == false) {

    } else {
        int c = 0;
        c = c + 1;
    }
}

答案 1

JLS 14.21 开始。无法访问的语句

如果语句由于无法访问而无法执行,则为编译时错误。

如果 if-then-else 语句是可访问的,则 else 语句是可访问的。

您的 if-then-else 声明是可访问的。因此,根据定义,编译器认为 else 语句是可访问的。

注意:有趣的是,以下代码也可以编译

// This is ok
if (false) { /* do something */ }

对于while

// This will not compile
while (false) { /* do something */ }

因为 的可访问性定义是不同的(强调我的):while

如果 while 语句可访问,并且条件表达式不是值为 false 的常量表达式,则包含的语句是可访问的


答案 2