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++
的执行顺序:
- 将
b
的值转换为某个临时值(可能是字节码寄存器); 这是b++
的第一部分,因为它是一个后增量 - 递增并将递增的结果存储在
b
(b++
的第二部分) - 将步骤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"
这将首先进行增量,并返回新值。