消息关闭
    暂无新消息!
好像是按下面代码这样执行的,但是为什么++a和a++后前面两个的a还是2呢,不是很明白,希望有大神能帮忙解惑

int a = 2;
a += a -= ++a * a++;

a = a + (a = a - (++a * a++));
a = 2 + (a = 2 - (++a * a++));

System.out.println(a);

7个回答

︿ 1
劝楼主一句,别把你有限的精力浪费在这种没有意义的“研究”上面
同样的代码,拿到C/C++/Java/Javascript/C#这些类C语言平台上运行,结果可能是不一样的

这种代码除了拿来秀一下之外,毫无意义,反而会引起同事的反感,至少我是坚决不允许我的团队成员写这种代码的

杨修咋死的?谁叫他老是研究些扯淡的东西拿到老板面前秀!
孔乙已咋落破的?只会研究些诸如茴香豆的茴字怎么写这些无聊的“知识”!
︿ 1
该方法返回a的值

public int test(){
    int a = 2;
    a += a -= ++a * a++;
    return a;
}

以下是该方法的jvm指令集,当你能看懂的时候,你就真正理解为什么等于-5了。

public int test();
    Code:
       0: iconst_2
       1: istore_1
       2: iload_1
       3: iload_1
       4: iinc          1, 1
       7: iload_1
       8: iload_1
       9: iinc          1, 1
      12: imul
      13: isub
      14: dup
      15: istore_1
      16: iadd
      17: istore_1
      18: iload_1
      19: ireturn
}
︿ 0
运算是这样的:a=a+(a-(++a*a++));
a = 2+(2-(3*3)) = -5
前面两个a已经是2了,不会因为后面的a++变化