java中的preincrement / postincrement

有人可以帮我理解原因:

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++); 

给:

3

4
4

变量++意味着:在评估表达式后增加变量。

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

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

 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 

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

需要注意的是:’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) } 

相比:

 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 } 

要知道的事情:
1. Java从左到右评估表达式
2. ++ i-pre-increment,即赋值前的增量
3. i ++ – 后增量,即赋值后的增量

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

OP1 = I ++
OP2 = 1 ++
总和= OP1 + OP2
i ++ – post增加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 = ++Ĵ
OP2 = ++Ĵ
总和= 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 = ++ķ
总和= OP1 + OP2

  1. 将k的值分配给op1,然后递增k。 OP1 = 1,k = 2时

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

  3. 总和= 4

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

在这里也应用上述逻辑。

如名称所示,后增量在变量处理(读取)之后增加变量的值,同时预先增加值BEFORE。

对于i,这意味着第一个i增加1,但读取为1,然后再次增加1(现在从第一个增量已经是2),因此增加到3,但读为2.这导致1 + 2 = 3,i的值也是3 ……

 i++ + i++ 

意味着使用i,然后递增,所以我被推到某种堆栈,

然后增加1,

然后将运算符(+)推入堆栈,

然后我(现在2)被推到堆栈。

由于expresseion现在已经结束,因此弹出值和运算符:第二个i是2,第一个i是1,2 + 1 = 3(我现在是3,因为它在被推送后递增)。

您可能遗漏的事情是,在评估整个表达后,我不会增加,在后增量的情况下,反之亦然。

的System.out.println(I ++)

– >生成1,因为它在打印后递增,但是当它调用两次时,你将有1 + 2,所以你可以将它翻译成

System.out.println(int i = i + 1,加上int i = i + 1 – >这给出了2)

第一个短语给出2和第二个给出3但是你在i ++增量之前打印它,所以你最后会得到1 + 2

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

– >生成2,因为它在打印前递增

因此,当你有++ j = 2然后++ j = 3所以++ j和++ j现在是5