我在接受采访时被问到以下问题。
int b = 0;
b = b++;
b = b++;
b = b++;
b = b++;
每行执行后b的值是多少? 每行输出为0。
为什么输出不是0,1,2,3?
答案 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++
:
b
的值到某个temp(可能是一个字节码寄存器);这是b++
的第一部分,因为它是帖子 -increment b
(b++
的第二部分)b
(=
的结果)答案 3 :(得分:1)
b++
与:
int temp = b;
b = b + 1;
return temp;
正如您所看到的,b++
将返回其旧值,但会覆盖b
的值。但是,由于您将返回的(旧)值分配给b
,新值将被覆盖,因此会被“忽略”。
如果你写的话会有区别:
b = ++b; //exactly the same as just "++b"
这首先进行增量,然后返回新值。