在此代码段中,
[1]int i=0;
[2]i = i++;
[3]System.out.println(i);
在第2行中,首先执行表达式(将其赋值为0),然后将值增加1。
在System.out.println(i)
中,我得到的答案为0而不是1.有人可以解释原因吗?
答案 0 :(得分:2)
i ++不会产生变量,而是产生值。
i ++收益率为0.
然后我增加到1。
然后将0分配给i。
总结:运营商的优先级可能不是您的预期。或者至少你可能误解了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来说不是这样)