为什么是一个简单的布尔没有给出“不可达代码”错误的if / else if / else?

为什么这段代码没有提供“无法访问的代码”错误? 由于布尔值只能是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; } } 

从JLS 14.21。 无法到达的语句

如果语句由于无法执行而无法执行,则会导致编译时错误。

如果if-then-else语句可达,那么else语句是可访问的。

您的if-then-else语句是可达的。 所以,根据定义,编译器认为else语句是可达的。

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

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

这是不正确的

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

由于可达性定义不同(重点介绍):

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

就编译器而言,只有在不执行代码的一部分的情况下才有可能离开方法范围,只会给出不可达的代码错误。 在你的情况,是的, else块永远不会被执行,但期望编译器在这里显示一个错误就像期待编译器debugging你的代码可能的逻辑错误。 以下面的代码为例。

 public static boolean method() { boolean flag = false; if(flag == true) { return true; } else if(flag == false) { return false; } else { return true & false; //comment in this line to get error } //return true | false; comment out this line to get error } 
Interesting Posts