java – Unreachable语句:while true vs if true

这个问题在这里已经有一个答案:> Unreachable statement error using while loop in java 2
> 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中的语句可达时,有非常严格的规则.这些规则是易于评估的设计,而不是100%的.它应该防止基本的编程错误.要理解java中的可达性,您仅限于这些规则,“常用逻辑”不适用.

所以这里是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.

条件是一个常数表达式“真”,没有中断.因此,它不能正常完成.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...