一个变量可以在一条语句中递增多少次?

How many times could a variable be incremented in a single statement?

我目前正在阅读 Barry Burd 的 Java For Dummies,并想到了这个小练习。

练习是关于post和预增量的。在问题中(请参阅代码)我能够找出所有行的答案(没有编译器的帮助)除了最后一行。根据我目前对 post/pre-increment 的了解,这没有意义。

请告知结果如何或为何与我的预期不符。

我尝试初始化并声明一个值为“20”的新变量 (int),然后 "i = i++ + i++",但仍然收到相同的结果 (41)。

也试过 out.println(i) 两次,但它仍然打印 41.

import static java.lang.System.out;

public class Main
{
    public static void main(String[] args) {

        int i = 10;
        out.println(i++); //10(post11)
        out.println(--i); //10(pre11-1)

        --i; //9(pre10-1)
        i--; //9(post8)
        out.println(i); //8
        out.println(++i); //9(pre8+1)
        out.println(i--); //9(post8)
        out.println(i); //8
        i++; //8(post9)
        i = i++ + ++i; //i = 9(post10) + 10(pre9+1) = 19(post20)
        out.println(i);  //20
        i = i++ + i++; //i = 20(post21) + 20(post21) = 40(post42)
        out.println(i); //41 (result copied from compiler)  

    }
}

我希望最后一行打印 42 而不是 41,因为“20”被添加了两次,并且也增加了两次。

i = i++ + i++

计算结果为(如果 i 为 20):

i = 20 + 21

因为第一个 i++ 是一个 post 运算符,所以不会影响它。但是,它确实会影响 i.

的下一次使用

我会一步步分解:

i =i+++ i++;,i == 20

i =20+ i++,i == 21

i = 20 +i++,i == 21

i = 20 +21,i == 22

i =41

当您使用赋值运算符 (=) 时,它是在 post 递增运算符之后完成的。因此你得到这个:

int i = 10;
i = i++;
System.out.println(i); // print 10

当你在同一行中两次使用post递增时,不是在该行完成后递增,而是在指令完成后递增(指令为i++)。因此,当执行 i = i++ + i++ 时;你实际上是在这样做:

i = i++ + i++; // i=20 Original code
i = 20 + i++;  // i=21 The first i++ return 20 then increment i to 21
i = 20 + 21;   // i=22 The second i++ return 21 then increment i to 22
i = 41;        // i=22 The addition is computed 
41;            // i=41 and assigne to i

这一切都与运算符优先级有关。

您可以通过编写自己的打印例程来查看发生了什么。

      int i = 9;
      i = print(i++) + print(++i); // i = 9(post10) + 10(pre9+1) = 19(post20)
      System.out.println("\n" + i); // 20
      i = print(i++) + print(i++); // i = 20(post21) + 20(post21) = 40(post42)
      System.out.println("\n" + i); // 41 (result copied from compiler)

      public static int print(int i) {
          System.out.print(" i = " + i + " ");
          return i;
      }