Java中的前后增量

时间:2018-10-23 16:48:17

标签: java post increment pre

我知道前后递增运算符的工作原理,但是最近我发现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.在这里发生了什么?

2 个答案:

答案 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