而(false)导致无法访问的语句编译错误

Ric*_*ard 14 java while-loop

我最近在发布之前从代码库中删除了一段代码,并使用if(false)语句来阻止执行:

if (false) {
    ArrayList<String> list = new ArrayList<String>();
    ...
}
Run Code Online (Sandbox Code Playgroud)

这编译得很好并且会阻止执行有问题的代码块(对或错,这不是当前的参数).

然而,有点意外,我把上面的块改为:

while (false) {
    ArrayList<String> list = new ArrayList<String>();
    ...
}
Run Code Online (Sandbox Code Playgroud)

并收到无法访问的语句编译错误.

我很欣赏编译错误并理解原因,但是,我很难理解这两个块之间的区别以及为什么前者编译得很好但后者在它们都有无法访问的语句时都没有.

Ste*_*ppo 12

在这两种情况下,编译器都应该引发错误,因为大括号之间的代码基本没有意义,但是 if (false)在Java中保存以模拟C/C++预处理器#if 0,这是禁用部分代码进行测试或调试的常用方法.

编辑:作为参考,"条件编译"在Java语言规范的第14.21章末尾详细说明.