5

让我们看看下面的do-while循环。这很明显,毫无疑问。

do
{
    System.out.println("Hello world");
    break;
} while(false);

这很明显,只是在控制台上显示字符串Hello world并退出。


现在,以下版本do-while似乎陷入了无限循环,但事实并非如此。它还在控制台上显示字符串Hello world并静默退出。

do
{
    System.out.println("Hello world");
    continue;
} while(false);

让我们看看另一个do-while带有标签的版本,如下所示。

label:do
{
    System.out.println("Hello world");
    continue label;
} while(false);

它也在控制台上显示消息Hello world并退出。这不是一个无限循环,因为它似乎意味着这种情况下的所有版本都以相同的方式工作。如何?

4

3 回答 3

9

continue语句的意思是“进行下一次迭代的循环控制逻辑”。这并不意味着无条件地开始下一个循环迭代。

(如果有人想在这方面参考 JLS,相关部分是JLS 14.16。但是,这部分规范有点复杂,并且取决于其他构造的规范;例如各种循环语句和 try / catch /最后。)

于 2011-12-25T15:06:34.917 回答
4

就像for循环一样,总是在进入循环体之前检查 a中的while条件(当然是在第一次通过之后)。而且,就像循环一样,永远不会导致终止表达式被跳过。do-whileforcontinue

于 2011-12-25T15:05:51.213 回答
3

continue 在实际继续之前检查布尔表达式,如手册所述:

continue 语句跳过 for、while 或 do-while 循环的当前迭代。未标记的形式跳到最内层循环体的末尾并计算控制循环的布尔表达式。

有关更多详细信息,请查看:分支语义

于 2011-12-25T15:07:14.497 回答