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

灰太狼 2021-03-23 13:44 704阅读 0赞

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

有这么一个 Java 程序:

  1. class Quirky {
  2. public static void main(String[] args) {
  3. int x = 1;
  4. int y = 3;
  5. System.out.println(x == (x = y)); // false
  6. x = 1; // reset
  7. System.out.println((x = y) == x); // true
  8. }
  9. }

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

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

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

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

  1. x == (x = y)
  2. 1 == (x = y)
  3. 1 == (x = 3) //assign 3 to x, returns 3
  4. 1 == 3
  5. false

第二个运算式是:

  1. (x = y) == x
  2. (x = 3) == x //assign 3 to x, returns 3
  3. 3 == x
  4. 3 == 3
  5. true

发表评论

表情:
评论列表 (有 0 条评论,704人围观)

还没有评论,来说两句吧...

相关阅读