public class Stu {
public static void main(String[] args) {
int a = 1, b = 2;
a = b + (b = a) * 0;
System.out.println(a + "--" + b);//2--1
}
}
上面代码中,为什么最终结果输出的是 2--1 呢?
难道不是按以下步聚来运算的?
step1:先算(b=a)*0 ,此时变量b的值变成了变量a的值;运算结果为 0
step2:然后算 b+0 ,第一运算中,变量b的值变成了a的值,那此处就是: 1+0 ,运算结果应该是 1
step3:将第二步结果赋值给变量a
为什么结果不是 1--1 ,而是 2--1 ?
------解决方案--------------------
有可能编译之后变成了 a = 2 + (b = a) * 0;
------解决方案--------------------
a = b + (b = a) * 0;
= 两边的运算从右向左的,先计算 b + (b = a) * 0
到了具体的 b + (b = a) * 0 又从左向右计算
所以是 2 + (2 = 1) * 0
计算后就是 2 + 0 赋给了 左边的 a ,此时 b 成为了1
结果就是 2--1
------解决方案--------------------

------解决方案--------------------
Java Language Specification规定:Evaluate Left-Hand Operand First
楼主的问题,很类似当年这个,参考里面我的回复:
http://bbs.csdn.net/topics/390400914?page=1