加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Unreachable语句:while true vs if true

发布时间:2020-12-14 05:04:57 所属栏目:Java 来源:网络整理
导读:这个问题在这里已经有一个答案: 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编译器
这个问题在这里已经有一个答案:> 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.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读