为什么在Java中, i - 和 - i 在 for loop 中具有相同的行为?
例: 我的变量“i”在循环之前不会减少:
for(int i = 5; i > 0; --i) {
System.out.println(i);
}
和
for(int i = 5; i > 0; i--) {
System.out.println(i);
}
...将同时打印5,4,3,2,1。
但是这个:
int i = 5;
System.out.println(--i);
int i = 5;
System.out.println(i--);
...将打印4和5。
答案 0 :(得分:4)
这是因为for
循环的工作原理如下:
for (<1. variable declaration and initialization>;
<2. condition to loop>;
<4. for update>) {
<3. statements>
}
在执行i--
循环中的语句之后以及在检查条件循环之前执行--i
或for
条件。这意味着,如果您在更新部分中使用i--
或--i
,则无关紧要。
答案 1 :(得分:4)
--i
和i--
都有相同的副作用,将i
递减1。它们的结果值不同。在循环代码中,您只使用副作用,忽略结果。在独立式println
代码中,您将显示结果。
答案 2 :(得分:3)
for循环的工作方式如下:
for(<Part that will be executed before the loop>;
<Part that is the condition of the loop>;
<Part that will be executed at the end of each iteration) {
<statements>
}
因此可以重写任何for循环:
<Part that will be executed before the loop>
while(<Part that is the condition of the loop>) {
<statements>
<Part that will be executed at the end of each iteration>
}
使用您的示例执行此操作会导致:
int i = 5; // Part that will be executed before the loop
while(i > 0) { // Part that is the condition of the loop
System.out.println(i); // statements
--i; // Part that will be executed at the end of each iteration
}
正如您所看到的那样,如果它是--i
或i--
,则输出无关紧要,因为打印调用将始终在变量递减之前发生。为了达到理想的效果,您可以尝试:
int i = 5;
while(i > 0) {
--i;
System.out.println(i);
}
答案 3 :(得分:0)
我认为最简单的方法是,在循环中,你是这样打印的:
System.out.println(i);
注意println()的参数是“i”,而不是“i--”或“--i”。减少已经发生在其他地方。您不是在循环中打印减量的结果,而是打印“i”的值。