Java中的后增量

时间:2013-08-10 13:03:02

标签: java post-increment

在此代码段中,

[1]int i=0;
[2]i = i++; 
[3]System.out.println(i);

在第2行中,首先执行表达式(将其赋值为0),然后将值增加1。

System.out.println(i)中,我得到的答案为0而不是1.有人可以解释原因吗?

3 个答案:

答案 0 :(得分:2)

i ++不会产生变量,而是产生值。

  1. i ++收益率为0.

  2. 然后我增加到1。

  3. 然后将0分配给i。

  4. 总结:运营商的优先级可能不是您的预期。或者至少你可能误解了i的实际增量发生在哪里。向人们展示使用i ++可以分成2行是正常的,其中后面的行正在进行增量 - 这并不总是正确的。它发生在赋值运算符之前。

答案 1 :(得分:0)

赋值首先保存i的值,然后将i设置为其值加1,最后将i重置为其原始值。种类:

int temp=i;
i=i+1;
i=temp;

答案 2 :(得分:-1)

@ chathura2020:转到此链接。这是关于Sequence point的。

当在单个表达式中多次修改相同变量时,序列点也会发挥作用。一个经常被引用的例子是C表达式i = i ++,它显然都将i分配给它先前的值并递增i。 i的最终值是不明确的,因为根据表达式评估的顺序,增量可以在赋值之前,之后或交错时发生。特定语言的定义可能指定一种可能的行为,或者只是说行为未定义。在C和C ++中,评估这样的表达式会产生不确定的行为。

(对于java来说不是这样)