【发布时间】:2013-05-02 19:45:02
【问题描述】:
我最近在发布之前从我们的代码库中删除了一段代码,并使用了 if(false) 语句来阻止执行:
if (false) {
ArrayList<String> list = new ArrayList<String>();
...
}
这编译得很好,并且会阻止执行有问题的代码块(对或错,这不是当前的论点)。
但是,有点意外,我将上面的块更改为:
while (false) {
ArrayList<String> list = new ArrayList<String>();
...
}
并收到无法访问的语句编译错误。
我很欣赏编译错误并理解其中的原因,但是,我很难理解这两个块之间的区别,以及为什么前者编译得很好,而后者在它们都有无法访问的语句时却不能。
【问题讨论】:
-
我猜
do-while比if更容易出错。这应该是后一种情况导致错误的原因。 -
我的猜测是编译器作者的初衷是让两者都导致无法访问的错误。但是,由于编程实践中人们通常使用 if(false) 禁用代码,因此允许它作为一种特殊情况。
标签: java while-loop