当前位置: 代码迷 >> J2SE >> java运算符优先级有关问题
  详细解决方案

java运算符优先级有关问题

热度:92   发布时间:2016-04-23 20:34:56.0
java运算符优先级问题

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
  相关解决方案