java中的preincrement / postincrement

时间:2012-07-24 10:42:12

标签: 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++);

得到:

3
5
4
4

5 个答案:

答案 0 :(得分:11)

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

++变量意味着:在评估表达式之前递增变量。

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

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 :(得分:4)

要了解的事项:
1. Java从左到右评估表达式 2. ++ i-预增量,即在赋值之前增量 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. 的值
  3. 将i分配给op2,然后增加i.op2 = 2,i = 3
  4. 的值
  5. 和= 3

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

  6. OP1 = ++Ĵ
    OP2 = ++Ĵ
    总和= OP1 + OP2
    ++ i - 预先增加i的值

    1. 现在在第一个j将增加到2,然后分配给op1。
    2. 然后,j将再次增加到3并分配给op2
    3. 然后,将添加op1和op2以将总和打印为5和值 j将是

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

    4. OP1 = K ++
      OP2 = ++ķ
      总和= OP1 + OP2

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

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

      3. Sum = 4

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

      4. 此处也应用上述逻辑。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

i++ + i++

表示使用i,然后递增,所以我被推到某种堆栈,

然后增加1,

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

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

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

你可能遗漏的是,在评估整个表达后,我没有增加,在增量后的情况下,反之亦然。[/ p>

答案 4 :(得分:1)

  

的System.out.println(I ++)

- &GT;生成1,因为它在打印后递增, 但是当它召唤两次时你会得到1 + 2 所以你可以把它翻译成

  

System.out.println(int i = i + 1,加上int i = i + 1 - &gt;这给出2)

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

  

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

- &GT;生成2,因为它在打印前递增

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