Pin*_*juh 8 java loops ambiguity do-while
运行此代码时,我可以期待什么行为:
do while(testA) {
// do stuff
} while(testB);
Run Code Online (Sandbox Code Playgroud)
它会表现得像:
do {
while(testA) {
// do stuff
}
} while(testB);
Run Code Online (Sandbox Code Playgroud)
要么:
if(testA) {
do {
// do stuff
} while(testA && testB);
}
Run Code Online (Sandbox Code Playgroud)
还是完全出乎意料的?
我问这个问题是因为我觉得这个问题很模糊,对于其他人来说这个话题,并不是因为我懒得去测试它.
它相当于你的第一个块:
do {
while(testA) {
// do stuff
}
} while(testB);
Run Code Online (Sandbox Code Playgroud)
解析它时Java语法的相关部分是:
DoStatement:
do Statement while ( Expression ) ;
Statement:
WhileStatement
WhileStatement:
while ( Expression ) Statement
Statement:
Block
Block:
{ BlockStatements_opt }
Run Code Online (Sandbox Code Playgroud)
您可以看到Java编译器将其解析为do <WhileStatement> while ( Expression ) ;.这是解析您编写的代码的唯一有效方法.
请记住,它没有任何特殊规则来解析此构造.由于写入do-while循环的不寻常方式,它最终会让人感到困惑.在正常使用中,do-while总是do { ... } while用显式花括号编写.