x == (x = y) 不等于 (x = y) == x ?

原创
2019/01/07 09:52
阅读数 48

简评:不瞒你说,我现在数数都是从 0 开始数的,整数是 1024。

有这么一个 Java 程序:

class Quirky {
    public static void main(String[] args) {
        int x = 1;
        int y = 3;

        System.out.println(x == (x = y)); // false
        x = 1; // reset
        System.out.println((x = y) == x); // true
     }
}

学习数学时我们学会了操作符优先原则,按照这个原则,这里的两次输出应该都是 true 才对,可为什么两次的输出结果不同呢?

其实 Java 中 == 是一个二进制相等运算符,简单而言就是在评估 == 右边操作数的任何部分之前,二进制运算符 == 的左边的操作数已经被完全评估过了。

//the example values
x = 1;
y = 3;

所以第一个运算式的步骤是:

x == (x = y)
1 == (x = y)
1 == (x = 3) //assign 3 to x, returns 3
1 == 3
false

第二个运算式是:

(x = y) == x
(x = 3) == x //assign 3 to x, returns 3
3 == x
3 == 3
true

原文链接:x == (x = y) 不等于 (x = y) == x ?

展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
在线直播报名
返回顶部
顶部