dry*_*hip 58 java if-statement unreachable-code unreachable-statement
如果我尝试编译
for(;;)
{
}
System.out.println("End");
Run Code Online (Sandbox Code Playgroud)
Java编译器产生错误说Unreachable statement
.但是,如果我添加另一个" 无法访问 "(根据我)break
声明并使其成为:
for(;;)
{
if(false) break;
}
System.out.println("End");
Run Code Online (Sandbox Code Playgroud)
它汇编.为什么它不会产生错误?
ass*_*ias 56
该行为在无法访问的语句的JLS描述中定义:
如果if-then语句可以访问,则可以访问then语句.
因此break;
,无论条件如何,编译器都会确定then-statement()是可以访问的if
.
更进一步,强调我的:
for
如果至少满足下列条件之一,则基本语句可以正常完成:
- for语句是可到达的,有一个条件表达式,条件表达式不是值为true的常量表达式(第15.28节).
- 有一个可到达的
break
语句退出for语句.
所以for可以正常完成,因为then语句包含a break
.正如您所注意到的,如果您替换break
为它将无法工作return
.
理由在本节末尾解释.实质上,if
有一个特殊的处理,以允许如下构造:
if(DEBUG) { ... }
Run Code Online (Sandbox Code Playgroud)
其中DEBUG可能是编译时常量.