b = b ++和b ++之间的差异

时间:2014-12-23 13:20:22

标签: java post-increment

我在接受采访时被问到以下问题。

int b = 0;
b = b++;
b = b++;
b = b++;
b = b++;

每行执行后b的值是多少? 每行输出为0。

为什么输出不是0,1,2,3?

4 个答案:

答案 0 :(得分:6)

在Java中,表达式

b = b++

相当于

int tmp = b;
b = b + 1;
b = tmp;

因此结果。

(在其他一些语言中,完全相同的表达式具有未指定的行为。请参阅Undefined behavior and sequence points。)

答案 1 :(得分:3)

提示:

int b = 0, c;
c = b++;
c = b++;
c = b++;
c = b++;
System.out.println(c);

c现在将是3,就像你想的那样,但因为在你的问题中你指的是b,它会得到0,因为正如已经解释的那样,它与:

int tmp = b;
b = b + 1;
b = tmp;

答案 2 :(得分:2)

因为这是执行b = b++

的顺序
  1. 获取b的值到某个temp(可能是一个字节码寄存器);这是b++的第一部分,因为它是帖子 -increment
  2. 将递增结果增加并存储在bb++的第二部分)
  3. 将步骤1中的值分配给b=的结果)

答案 3 :(得分:1)

b++与:

相同
int temp = b;
b = b + 1;
return temp;

正如您所看到的,b++将返回其旧值,但会覆盖b的值。但是,由于您将返回的(旧)值分配给b,新值将被覆盖,因此会被“忽略”。

如果你写的话会有区别:

b = ++b; //exactly the same as just "++b"

这首先进行增量,然后返回新值。