有没有Java厉害的回答一下这个问题,要有详细计算过程

img

正确答案是3,怎么来的?

结果为3
x = 0
x-- 此时x=-1
y = x++ + ++x
分解为
y = -1 + 1 = 0
x++ 是先将-1放入公式再让x+1,此时x = 0,-1放入公式
++x 是将x+1的结果放入公式,此时x = 1 ,1放入公式
所以
x + y + ++x = 1 + 0 + 2 = 3。(这里的2是x = 1后 ++x的结果)

-1

x y
0 null
-1 x++ + ++x//先计算在自增 + 先自增在计算 //-1 + 1
1 0
x+y + ++x//1 + 0 + 2
3

首先,x++是指先取x的值,x的值再加1,++x是x的值先加1,再取x的值
这个问题看下java编译器生成的字节码就很容易弄明白了,如下图,这是反编译得到的字节码:

img


总结,执行过程如下:

public static void main(String[] args) {
        int x =0 ;//x的值为0
        x--;//x的值为-1
        int y = x++ + ++x;//关键在这行,x++ 计算得到 -1 ,之后x的值自增一次为0,执行++x的值又自增了一次,因此++x的值为1,所以y(-1 + 1)的值是0
        System.out.println(x+y+ ++x);//  1 + 0 + 2 =3
    }