小编mar*_*094的帖子

无法访问的声明:如果为true则为true

我该如何理解这个Java编译器的行为?

while (true) return;
System.out.println("I love Java");
// Err: unreachable statement

if (true) return;
System.out.println("I hate Java");
// OK.
Run Code Online (Sandbox Code Playgroud)

谢谢.

编辑:

几分钟后我发现了这一点:

在第一种情况下,编译器因无限循环而抛出错误.在这两种情况下,编译器都不会考虑语句内部的代码.

编辑二:

让我对javac印象深刻的是:

    if (true) return; // Correct
}
    while (true) return; // Correct
}
Run Code Online (Sandbox Code Playgroud)

看起来javac知道两个循环内部是什么,如果结果,但是当你编写另一个命令时(如第一个例子中),你得到非等效行为(看起来像javac忘记了循环内部/ if).

公共静态最终EDIT III: 作为此答案我可以此话(希望正确)的结果:作为表达if (arg) { ...; return;}while (arg) { ...; return;}对Java是等效的两个语义和语法(在字节码)当且仅当argv是不恒定的(或有效最终型)的表达.如果argv是常量表达式字节码(和行为)可能不同.

免责声明 这个问题不是关于无法访问的语句,而是对逻辑等效表达式的不同处理,例如while true returnif true return.

java javac unreachable-code

9
推荐指数
2
解决办法
1035
查看次数

标签 统计

java ×1

javac ×1

unreachable-code ×1