我知道前后递增运算符的工作原理,但是最近我发现Java中有一个奇怪的行为。到目前为止,我所知道的是(也如本answer中所述):
a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8)
清楚地表明++ a在递增之后返回值,a ++在递增之前返回值。但是最近,我遇到了这段代码:
int a = 0;
int b = a++;
int c = ++b;
System.out.println("b=" + b + "\nc=" + c);
这段代码的输出是:
b=1
c=1
这很奇怪,因为a ++应该返回0,然后递增a,将b的值保持为0,这从上面引用的答案可以明显看出,而在下一行中,应在将值赋给c之前先递增b ,使其成为现实1.在这里发生了什么?
答案 0 :(得分:4)
当调用int b = a ++时,将a的值(0)分配给b(现在为0),然后a递增为1。
因此,当调用int c = ++ b时,b为0。然后b被递增为1(由++ b赋值),然后将其值分配给c。
最后,b = 1和c = 1
答案 1 :(得分:2)
您真正发现的与预期行为一样奇怪的东西...
int a = 0; //声明
int b = a ++; //声明b的值为0,然后a变为1。
int c = ++ b; // c和b都在这里获得0 ++-> 1
System.out.println("b=" + b + "\nc=" + c);
打印预期的输出。
b=1
c=1