为何Java编译器不判定该else分支为不可达语句?
为什么else分支的代码没被标记为不可达?
先看你的代码:
public class Main { static String test(){ if(true){ return "true"; } else{ return "false"; // 为何这不是不可达代码? } } public static void main(String[] args) { System.out.println(test()); } }
这是Java语言规范特意规定的:哪怕if的条件是编译期常量true,else分支也会被判定为可达代码。
这么设计是为了支持「条件编译」的常见写法——比如很多项目会定义一个常量来切换调试/生产代码:
public static final boolean DEBUG = true; if (DEBUG) { // 只在调试模式下跑的代码 } else { // 生产环境的逻辑 }
要是编译器把else分支当成不可达,那当DEBUG改成false时,原来的if分支就会变成不可达代码报错,这显然不符合开发中的实际需求。
所以你的代码里,虽然if(true)肯定会走true分支,但编译器依然认为else分支是合法可达的,自然不会抛出"unreachable code"的编译错误。
内容的提问来源于stack exchange,提问作者Peter Orgovan
相关产品推荐
相关产品推荐

