Java千问:你真的掌握了Java语言的"=="运算符吗?我看未必!

不少程序设计语言都使用”==”来判断两个数据是否相等,咱们在编程中也常用这个运算符,以致于对它已经熟视无睹。那么是否是任意两个数据均可以使用”==”来判断相等呢?”==”比较的究竟是什么?咱们今天就经过一篇短文来聊聊这个不起眼的”==”运算符。html

1、基础数据类型之间的比较

首先咱们来看一段代码
Java千问:你真的掌握了Java语言的
这段代码当中,声明了8个基础类型的变量,这8个变量当中, boolean类型的变量flag是个“异类”,为何这么说呢?由于其余7种数据类型之间均可以使用”==”作比较,不管比较的结果是true仍是false,但至少可以顺利经过编译,不会出现语法错误。但boolean类型的变量只能与其类型相同的变量进行比较,不然就会出现语法错误
Java千问:你真的掌握了Java语言的
经过上面的代码咱们能够看到,不能把boolean类型的数据与其余7种基础数据进行比较,不然会报错。咱们把这种现象戏称为“孤独的布尔”。那么,为何boolean类型的数据不能与其余7种基础数据进行比较呢?缘由很简单,就是由于其余7种类型的数据,本质上都是“数字”,咱们使用”==”对这7种数据进行比较,比较的就是“数字的值”是否相等。而boolean类型的数据只有true和false两种逻辑值,不能用来与“数字”进行比较。编程

2、对象之间的比较

两个对象之间若是用“==”进行比较,会不会报错呢?不少人可能会说,我用“==”比较过两个String对象,其余状况彷佛并不清楚。那么咱们就来讲说两个对象之间用”==”进行比较的规则。首先必须清楚,两个对象之间若是使用”==”进行比较,比的究竟是什么?按照Java官方的说法,使用”==” 是比较“两个对象内存地址的数值是否相等”。咱们可能不太理解这句话的意思,若是翻译成大白话就是说:看一下这两个对象是否是“同一个”对象。那么,是否是任意两个对象都能用”==”进行比较运算呢?若是这两个对象的类型是相同的,就能够用”==”进行运行运算,反之,若是这两个对象的类型不相同,使用”==”进行比较就会报错。咱们能够看下面的代码
Java千问:你真的掌握了Java语言的
代码中,a1和a2类型相同,能够用”==”进行比较,但a1和b1类型不一样,用”==”进行比较就会报错。咱们把对象之间的比较规则,能够用一个词来归纳,那就是“物以类聚”。意思是类型相同才能进行比较。
两个对象用”==”进行比较,还有一种特殊状况,那就是两个对象的类型之间若是有继承关系,那么也是能够用”==”进行比较的。请看下面的代码
Java千问:你真的掌握了Java语言的
你们能够看到,对象f是Father类型的,而对象c是Child类型的。可是Child类是Father类的子类,它们之间有继承关系,因此对象f和c也是能够用”==”进行比较的。其实f和c从本质上讲,也都是Father类的,因此也符合”物以类聚”规则。ide

3、对象与基础数据之间比较

按照Java的语法,一个对象是不能直接用”==”和一个基础数据进行比较。可是,从JDK1.5开始,Java支持一种叫作”自动装箱拆箱”的机制,这个机制的引入,产生了一种特殊状况,那就是:基础数据类型能够和包装类对象直接进行比较
在这里,首先说一下”包装类”是个什么东西。Java语言为了可以让基础数据在某些特殊场合下用对象的形式表示或处理基础数据类型,就为每种基础数据类型都定义了一个包装类。每一个包装类的对象当中,就包含一个基础类型的数据。基础数据类型一共有8种,分别是:Btye、Short、Integer、Long、Double、Float、Character和Boolean,分别对应byte、short、int、long、double、float、char和boolean这8种基础数据类型。好比一个Integer类的对象当中,就包含了一个int类型的数据。
自动装箱拆箱机制,可以让咱们直接在程序中,把包装类的对象和基础数据类型进行比较。请看下面的程序
Java千问:你真的掌握了Java语言的
经过这段程序,咱们能够发现:
一、一个int类型的数据能够直接和Integer类型的对象用”==”进行比较(见标号为①的代码),由于自动拆箱装箱机制在起做用。
二、一个int类型的数据甚至能够直接和Double类型的对象直接用”==”进行比较(见标号为②的代码),由于有自动装箱拆箱机制作保证,而且它们本质上都是数字。只要是数字之间的比较都是合法的。
可是:
三、Boolen类型的对象仍是不能和其余基础类型数据进行比较(见标号为③的代码),由于”布尔是孤独的”。
四、两个包装类对象进行比较,若是这两个对象类型不一样,也不能直接比较(见标号为④的代码),由于这两个对象所属的类型并没有继承关系
但愿经过这篇短文可以帮助你们对”==”这个运算符会有更深刻的认识。学习

如想系统学习Java编程,能够点击https://edu.51cto.com/lecturer/2256836.html观看我在本站的视频课程,有问题也能够加入个人QQ群291839907一块儿讨论!翻译

相关文章
相关标签/搜索