资讯专栏INFORMATION COLUMN

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

Nosee / 1479人阅读

摘要:简评不瞒你说,我现在数数都是从开始数的,整数是。所以第一个运算式的步骤是第二个运算式是原文链接不等于

简评:不瞒你说,我现在数数都是从 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 ?

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72854.html

相关文章

  • 深入理解ES6(二)(解构赋值)

    摘要:默认值解构赋值允许指定默认值。因为解析器会将起首的大括号,理解成一个代码块,而不是赋值语句。数值和布尔值的解构赋值解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。可以使用圆括号的情况可以使用圆括号的情况只有一种赋值语句的非模式部分。 变量的解构赋值 (1) 数组的解构赋值 1、基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destru...

    mzlogin 评论0 收藏0
  • 深入理解ES6(二)(解构赋值)

    摘要:默认值解构赋值允许指定默认值。因为解析器会将起首的大括号,理解成一个代码块,而不是赋值语句。数值和布尔值的解构赋值解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。可以使用圆括号的情况可以使用圆括号的情况只有一种赋值语句的非模式部分。 变量的解构赋值 (1) 数组的解构赋值 1、基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destru...

    jas0n 评论0 收藏0
  • x == (x = y) 等于 (x = y) == x

    摘要:简评不瞒你说,我现在数数都是从开始数的,整数是。所以第一个运算式的步骤是第二个运算式是原文链接 简评:不瞒你说,我现在数数都是从 0 开始数的,整数是 1024。 有这么一个 Java 程序:class Quirky { public static void main(String[] args) { int x = 1; int y = 3; System....

    mtunique 评论0 收藏0
  • 【重温基础】5.表达式和运算符

    摘要:系列目录复习资料资料整理个人整理重温基础语法和数据类型重温基础流程控制和错误处理重温基础循环和迭代重温基础函数本章节复习的是中的表达式和运算符,用好这些可以大大提高开发效率。 本文是 重温基础 系列文章的第五篇。今日感受:家的意义。 系列目录: 【复习资料】ES6/ES7/ES8/ES9资料整理(个人整理) 【重温基础】1.语法和数据类型 【重温基础】2.流程控制和错误处理 【重温基...

    马忠志 评论0 收藏0

发表评论

0条评论

Nosee

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<