b = b ++和b ++之间的区别

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

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

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

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

在Java中,表达式

 b = b++ 

相当于

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

因此结果。

(在其他一些语言中,完全相同的表达式具有未指定的行为。请参阅未定义的行为和序列点 。)

因为这是b = b++的执行顺序:

  1. b的值转换为某个临时值(可能是字节码寄存器); 这是b++的第一部分,因为它是一个增量
  2. 递增并将递增的结果存储在bb++的第二部分)
  3. 将步骤1中的值分配给b=的结果)

暗示:

 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; 

b++与以下内容相同:

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

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

如果你写的话会有所不同:

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

这将首先进行增量,并返回新值。