java中的preincrement/postincrement

Mr.*_*ino 3 java

有人可以帮我理解原因:

int i=1;
int j=1;
int k=1;
int l=1;

System.out.println(i++ + i++);  
System.out.println(++j + ++j);  
System.out.println(k++ + ++k);  
System.out.println(++l + l++);
Run Code Online (Sandbox Code Playgroud)

给:

3
5
4
4

ATa*_*lor 13

变量++表示:在计算表达式后递增变量.

++变量意味着:在计算表达式之前增加变量.

这意味着,要将您的示例翻译为数字:

System.out.println(i++ + i++);  //1 + 2
System.out.println(++j + ++j);  //2 + 3
System.out.println(k++ + ++k);  //1 + 3
System.out.println(++l + l++);  //2 + 2
Run Code Online (Sandbox Code Playgroud)

这是否清楚,还是需要进一步解释?

需要注意的是:'println'之后所有这些变量的值等于'3'.

由于OP问这个行为实际上有用,所以这里有一个"用例".

int i = 0;
while(++i < 5) {           //Checks 1 < 5, 2 < 5, 3 < 5, 4 < 5, 5 < 5 -> break. Four runs
    System.out.println(i); //Outputs 1, 2, 3, 4 (not 5) 
}
Run Code Online (Sandbox Code Playgroud)

相比:

int i = 0;
while(i++ < 5) {           //Checks 0 < 5, 1 < 5, 2 < 5, 3 < 5, 4 < 5, 5 < 5 -> break. Five runs
    System.out.println(i); //Outputs 1, 2, 3, 4, 5
}
Run Code Online (Sandbox Code Playgroud)


Sha*_*rty 5

需要了解的事情:
1. Java 从左到右计算表达式
2. ++i-pre-increment 即赋值前递增
3. i++ - postincrement 即赋值后递增

System.out.println(i++ + i++);
Run Code Online (Sandbox Code Playgroud)

op1=i++
op2=1++
sum=op1+op2
i++ - 后递增 i 的值

  1. 将 i 赋给 op1,然后递增 i.op1=1,i=2 的值
  2. 将 i 赋给 op2,然后递增 i.op2=2,i=3 的值
  3. 总和=3

    System.out.println(++j + ++j);

op1=++j
op2=++j
sum=op1+op2
++i - 预先递增 i 的值

  1. 现在,首先 j 将增加到 2,然后分配给 op1。
  2. 然后,j将再次增加到3并分配给op2
  3. 然后,op1和op2相加,打印总和为5,j的值为

    System.out.println(k++ + ++k);

op1=k++
op2=++k
和=op1+op2

  1. 将 k 的值赋给 op1,然后递增 k。op1=1,k=2

  2. 增加 k 的值,然后分配给 op2。op2=3,k=3

  3. 总和 = 4

    System.out.println(++l + l++);

此处也应用上述逻辑。