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

Wil*_*ill 58 java boolean unreachable-code

为什么这段代码没有给出"无法访问的代码"错误?由于布尔值只能为true或false.

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

    } else if (a == false) {

    } else {
        int c = 0;
        c = c + 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

dej*_*uth 59

来自JLS 14.21.无法访问的语句

如果由于无法访问语句而无法执行语句,则会发生编译时错误.

如果if-then-else语句可达,则可以访问else语句.

你的if-then-else语句是可以访问的.因此,通过定义,编译器认为else语句是可达的.

注意:有趣的是,下面的代码也会编译

// This is ok
if (false) { /* do something */ }
Run Code Online (Sandbox Code Playgroud)

事实并非如此 while

// This will not compile
while (false) { /* do something */ }
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我不知道这是否是Java设计者的想法,但是有一个`if(COMPILE TIME CONSTANT EXPRESSION){...}`构造其中COMPILE TIME CONSTANT EXPRESSION可能是true或false取决于环境. (5认同)