为什么" - 我"和"我 - "在Java for循环中具有相同的行为?

时间:2015-03-03 14:48:51

标签: java for-loop

为什么在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。

4 个答案:

答案 0 :(得分:4)

这是因为for循环的工作原理如下:

for (<1. variable declaration and initialization>;
     <2. condition to loop>;
     <4. for update>) {
    <3. statements>
}

在执行i--循环中的语句之后以及在检查条件循环之前执行--ifor条件。这意味着,如果您在更新部分中使用i----i,则无关紧要。

答案 1 :(得分:4)

--ii--都有相同的副作用,将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
}

正如您所看到的那样,如果它是--ii--,则输出无关紧要,因为打印调用将始终在变量递减之前发生。为了达到理想的效果,您可以尝试:

int i = 5;
while(i > 0) {
    --i;
    System.out.println(i);
}

答案 3 :(得分:0)

我认为最简单的方法是,在循环中,你是这样打印的:

System.out.println(i);

注意println()的参数是“i”,而不是“i--”或“--i”。减少已经发生在其他地方。您不是在循环中打印减量的结果,而是打印“i”的值。