首页 > 编程语言 >Java千问09:你真的掌握了Java语言的==吗?我看未必!

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

时间:2022-12-28 10:32:43浏览次数:62  
标签:Java 千问 对象 09 数据类型 类型 比较 进行

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

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

首先我们来看一段代码

Java千问09:你真的掌握了Java语言的==吗?我看未必!_包装类

这段代码当中,声明了8个基础类型的变量,这8个变量当中,boolean型的flag是个“异类”,为什么这么说呢?因为其他7种数据类型之间都可以使用”==”做比较,无论比较的结果是true还是false,但至少能够顺利通过编译,不会出现语法错误。但boolean类型的变量只能与其类型相同的变量进行比较,否则就会出现语法错误,如下图:

Java千问09:你真的掌握了Java语言的==吗?我看未必!_==_02

通过上面的代码我们可以看到,不能把boolean类型的数据与其他7种基础数据进行比较,否则会报错。我们把这种现象戏称为“孤独的布尔”。那么,为什么boolean类型的数据不能与其他7种基础数据进行比较呢?原因很简单,就是因为其他7种类型的数据,本质上都是“数字”,我们使用”==”对这7种数据进行比较,比较的就是“数字的值”是否相等。而boolean类型的数据只有true和false两种逻辑值,不能用来与“数字”进行比较。

二、对象之间的比较

两个对象之间如果用“==”进行比较,会不会报错呢?很多人可能会说,我用“==”比较过两个String对象,其他情况似乎并不清楚。那么我们就来说说两个对象之间用”==”进行比较的规则。首先必须清楚,两个对象之间如果使用”==”进行比较,比的到底是什么?按照Java官方的说法,使用”==” 是比较“两个对象内存地址的数值是否相等”。我们可能不太理解这句话的意思,如果翻译成大白话就是说:看一下这两个对象是不是“同一个”对象。那么,是不是任意两个对象都能用”==”进行比较运算呢?如果这两个对象的类型是相同的,就可以用”==”进行运行运算,反之,如果这两个对象的类型不相同,使用”==”进行比较就会报错。我们可以看下面的代码

Java千问09:你真的掌握了Java语言的==吗?我看未必!_包装类_03

代码中,a1和a2类型相同,可以用”==”进行比较,但a1和b1类型不同,用”==”进行比较就会报错。我们把对象之间的比较规则,可以用一个词来概括,那就是“物以类聚”。意思是类型相同才能进行比较。

两个对象用”==”进行比较,还有一种特殊情况,那就是两个对象的类型之间如果有继承关系,那么也是可以用”==”进行比较的。请看下面的代码

Java千问09:你真的掌握了Java语言的==吗?我看未必!_==_04

大家可以看到,对象f是Father类型的,而对象c是Child类型的。但是Child类是Father类的子类,它们之间有继承关系,所以对象f和c也是可以用”==”进行比较的。其实f和c从本质上讲,也都是Father类的,所以也符合”物以类聚”规则。


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

按照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千问09:你真的掌握了Java语言的==吗?我看未必!_包装类_05

通过这段程序,我们可以发现:

1、一个int类型的数据可以直接和Integer类型的对象用”==”进行比较(见标号为①的代码),因为自动拆箱装箱机制在起作用。

2、一个int类型的数据甚至可以直接和Double类型的对象直接用”==”进行比较(见标号为②的代码),因为有自动装箱拆箱机制做保证,并且它们本质上都是数字。只要是数字之间的比较都是合法的。

但是:

3、Boolen类型的对象还是不能和其他基础类型数据进行比较(见标号为③的代码),因为”布尔是孤独的”。

4、两个包装类对象进行比较,如果这两个对象类型不同,也不能直接比较(见标号为④的代码),因为这两个对象所属的类型并无继承关系

希望通过这篇短文能够帮助大家对”==”这个运算符会有更深入的认识。

如果想系统学习Java编程可以点击这里观看我在本站的视频课程。

标签:Java,千问,对象,09,数据类型,类型,比较,进行
From: https://blog.51cto.com/mugexuetang/5973861

相关文章

  • Java千问10:你知道Java语言boolean类型的变量到底占多大空间吗?
    ​我们都知道,Java语言中有个boolean类型。每个boolean类型的变量中存储的是一个true或者是false的逻辑值。那么存储这个逻辑值,需要多大的空间呢?从理论上来讲,存储这个逻辑值......
  • JAVA在线看CAD图纸快速入门
    前言梦想云图开发包,支持所有DWG/CAD图纸的在线浏览、批注、坐标提取、对象选择、编辑等功能,下面讲解如何从零开始使用梦想云图开发包。在线演示网址1:​​梦想CAD控件_CAD看......
  • JAVA17使用JS ScriptEngine
    JAVA动态运算符判断要借用 js 当我写下下面代码ScriptEngineManagermanager=newScriptEngineManager();//创建脚本执行引擎Scrip......
  • Java千问05:Java语言中为byte和short类型变量赋值为啥会报错?
    咱们先来看一段很简单的Java代码这段代码非常简单,没有任何技术含量。但是,如果我们把这段代码改成下面的样子大家可以看到,我们只是用一个变量a代替了原来赋值表达式当中的常......
  • Java 提供给第三方使用接口方法
    前言相信有很多小伙伴,在日常的开发中都有遇到过需要调用第三方接口的需求吧,但是自己有没有写过接口提供给第三方使用呢,常规的都是我们调用别人的接口,但是自己需要开发接口提......
  • Java千问06:Java语言中最大的整数再加1等于多少?看完秒懂!
    ​已知Java语言中int类型所能表示的最大整数为2147483647,请问以下代码执行结果是什么?一部分人都会认为这段程序压根就无法通过编译,也有人认为,这段程序能够通过编译,但在运行......
  • Java HashMap原理
    HashMap是Java中用于实现映射关系的一种数据结构。它允许将一个对象(称为键)映射到另一个对象(称为值)。当需要访问值时,可以使用键来查找值。HashMap的实现原理是使用散列函数......
  • Java千问07:你真的会用Java的int型变量吗?有些坑你真的不知道!
    ​我们在进行Java编程的时候,使用最频繁的数据类型基本上就是int型了。平时在使用这种数据类型的过程中,我们似乎也并没有感觉到有什么太多需要注意的地方,其实int类型的变量在......
  • Java千问08:关于Java语言复合赋值运算符的两个问题,快来瞧瞧!
    ​我们知道,在Java以及很多高级编程语言当中,都有一种运算符叫做复合赋值运算符。复合赋值运算符由两个符号组成,它所能完成的运算操作也分为两步:第一步是运算,第二步是赋值。比......
  • JAVA代码审计_若依管理系统
    若依管理系统代码审计该项目使用Mybatis作为数据库持久化框架。全局搜索${、关注xxxmapper.xml文件寻找SQL注入。1)后台角色管理处SQL注入漏洞点“SysRoleMapper.x......