在回顾
while
和 for
循环时,我遇到了几个循环,它们会迭代一个变量,i
,然后打印它。我知道分号给 while
循环一个空体,但它在 for
循环中是否同样有效?
例如,如果我在这个循环中的
for
语句后使用分号:
int i = 0;
for (i = 0; i < 10; i++);
System.out.println(i + 4);
然后程序输出:
14
但是,当在这个循环中
while
语句后使用分号时:
int i = 0;
while (i < 10);
i++;
System.out.println(i + 4);
什么都没有打印。
为什么会这样?我假设分号结束了循环,但我可能误解了它们是如何工作的,并且由于
i
是在循环外声明和实例化的,所以范围不应该有任何问题。
在代码中
while (i < 10);
i++;
i++;
语句是不在循环内,正是因为上一行的分号结束了循环。
由于循环内没有代码,所以没有什么可以改变
i
的值;因此,i < 10
不能阻止为真;因此,循环无法结束;因此,代码没有到达i++
行(或随后尝试显示输出)。
另一方面,代码
for (i = 0; i < 10; i++);
大致相当于
i = 0;
while (i < 10) {
i++;
}
i++
发生在 for
循环体内的代码之后(即使 循环体使用 continue
跳到下一次迭代)。在这里,for
循环体内没有代码,但是 i++
仍然在“无”之后发生。因此,i
每次循环都会增加;最终i
不再是< 10
(具体来说,等于10);剩下的代码继续进行。
在第一种情况下,如您所说,for 循环体为空,因此它一直执行到
i
等于10
为止。到那时它结束,打印 10 + 4 的结果。
在第二种情况下,没有打印任何东西,因为 while 末尾的
;
使它成为一个无限循环:你基本上是在说:“直到 i
< 10, do nothing".
Since i = 0
,你永远不会退出那个循环,永远不会到达打印语句。