有谁知道原因:
public void foo()
{
System.out.println("Hello");
return;
System.out.println("World!");
}
Run Code Online (Sandbox Code Playgroud)
将被报告为Eclipse下的"无法访问的错误",但是
public void foo()
{
System.out.println("Hello");
if(true) return;
System.out.println("World!");
}
Run Code Online (Sandbox Code Playgroud)
只触发"死代码"警告?
我能想到的唯一解释是Java编译器只标记第一个,而Eclipse中的一些额外分析计算出第二个.但是,如果是这种情况,为什么Java编译器不能在编译时弄清楚这种情况呢?
Java编译器不会在编译时弄清楚if(true)没有效果,从而产生基本相同的字节码吗?在什么时候应用可达代码分析?
我想一个更通用的方法来思考这个问题是:"什么时候应用可达代码分析"?在将第二个Java代码片段转换为最终字节码时,我确信在某些时候删除了"if(true)"运行时等效项,并且两个程序的表示变得相同.然后,Java编译器不会再次应用其可访问的代码分析吗?