这两个循环是否总是等价的

Mat*_*att 3 java loops

在Java编程语言中,以下两个循环是否等效于任何表达式exp和循环体?唯一的条件应该是新引入的变量b不会出现在方法的其他地方(并且不隐藏属性,......)

while(exp) {
    body
}
Run Code Online (Sandbox Code Playgroud)

for(boolean b = exp; b; b = exp) {
    body
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 5

是的,根据这些假设.

所述for构建体检查第一次迭代之前的状态,因此,如果bfalse的话,身体将永远不会被执行.换句话说,在您的代码示例中,exp在每次循环迭代之前精确计算一次,并且结果用于决定是否执行该迭代.

但是你为什么要写这样的代码呢?

  • @Captain:我认为区别在于,如果你这样做的话,`s`的范围会"泄漏"出来. (2认同)