> Why does Java have an “unreachable statement” compiler error?8
> if(false) vs. while(false): unreachable code vs. dead code2
我应该如何理解这个Java编译器的行为?
while (true) return; System.out.println("I love Java"); // Err: unreachable statement if (true) return; System.out.println("I hate Java"); // OK.
谢谢.
编辑:
几分钟之后,我发现了一点:
在第一种情况下,由于无限循环,编译器会抛出错误.在这两种情况下,编译器都不会考虑语句中的代码结果.
编辑二:
现在对javac有什么印象:
if (true) return; // Correct } while (true) return; // Correct }
它看起来像javac知道什么是内部循环,如果结果,
但是当你写另一个命令(如第一个例子)时,你会得到非等效的行为(看起来像javac忘记了什么是内部循环/ if).
公共静态最终编辑三:
作为这个答案的结果,我可以说(希望正确):
表达式如(arg){…; return;}和while(arg){…; return;}在语法和语法上(在字节码中)等同于Java iff argv是非常量(或有效的最终类型)表达式.如果argv是常量表达式,字节码(和行为)可能不同.
放弃
这个问题不是不可达到的语句,而是对逻辑等效表达式的不同处理,如真正返回,如果是真的返回.
解决方法
所以这里是Java语言规范14.21. Unreachable Statements的规则
An if-then statement can complete normally iff it is reachable.
所以没有别的,if-then之后的语句总是可以访问的
A while statement can complete normally iff at least one of the following is true:
The while statement is reachable and the condition expression is not a constant expression (§15.28) with value true.
There is a reachable break statement that exits the while statement.
条件是一个常数表达式“真”,没有中断.因此,它不能正常完成.