【JAVASE】带你了解instanceof和equals的魅力

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉

🍎个人主页:再无B~U~G-CSDN博客

1.instanceof

instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型

解释一下:

 这里说明下

  • 类的实例包含本身的实例,以及所有直接或间接子类的实例

  • instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误

instanceof   关键词官方介绍:https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.20.2

来个案例看看:

给三个类 ~ 代码:

public interface A {
}public class B implements A{}public class C extends B{
}

代码测试案例:

public class InstanceofTest3 {public static void main(String[] args) {A a = null;boolean result;result = a instanceof A;System.out.println(result); // 结果:false null用instanceof跟任何类型比较时都是falsea = new B();b = new B();result = a instanceof A;System.out.println(result); // 结果:true a是接口A的实例对象引用指向子类类B,类B实现了接口A,所以属于同一个继承树分支result = a instanceof B;System.out.println(result); // 结果:true a是接口A的实例对象引用指向子类类B,类B实现了接口A,所以属于同一个继承树分支result = b instanceof A;System.out.println(result);// 结果:true b是类B的实例对象,类B实现了接口A,所以属于同一个继承树分支result = b instanceof B;System.out.println(result);// 结果:true b是类B的实例对象,类B实现了接口A,所以属于同一个继承树分支B b2 = new C();result = b2 instanceof A;System.out.println(result); // 结果:true b2是父类B引用指向子类C,类B实现了接口A,所以属于同一个继承树分支result = b2 instanceof B;System.out.println(result); // 结果:true b2是父类B引用指向子类C,所以属于同一个继承树分支result = b2 instanceof C;System.out.println(result); // 结果:true b2是父类B引用指向子类C,所以属于同一个继承树分支}
}

instanceof的应用

instanceof一般用于对象类型强制转换

比如说:

public class C extends B {private void print(Object a) {System.out.println(a+" instanceof");}public void convert(String b) {if (b instanceof Object) {//如果b和Object有关系则执行if里面的语句,相反不执行this.print(b);}}}

2.equals

  1. 是一个方法,并非运算符

  2. 只适用于引用数据类型

 Object类中equals( )的定义:

 public boolean equals(object obj) {return (this == obj);  //this是指类的当前实例}

类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同。即两个引用是否指向同一个对象实体

 但是

Java中重写的equals()

这里我们看一下java的一些自带的包装类怎么重写equals()的:

public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}

我们可以非常清晰的看到String的equals()方法是进行内容比较,而不是单纯的引用比较

注意:

  1. ==既可以比基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型就是比较内存地址
  2. equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也是==;我们可以看到String等类的equals方法是被重写过的,而且String类在日常开发中用的比较多,久而久之,形成了equals是比较值的错误观点。
  3. 具体要看自定义类里有没有重写Object的equals方法来判断。
  4. 通常情况下,重写equals方法,会比较类中的相应属性是否都相等 

好啦,今天就到这里了,感谢观看。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/597646.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.4.2-day07-CSS 盒子模型(显示模式、盒子模型)

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 作业 2024.4.2 学习笔记CSS标签元素显示模式1 块元素2 行内元素3 行内块元素4…

怎么用二维码来分享视频?视频二维码制作的简单方法

怎么用二维码来分享视频呢?为了能够更快速的将视频传递给其他人,所以现在很多人都使用生成二维码的方式,让其他人通过扫码来查看视频内容,从而实现多人同时扫码看视频的效果。这种方式也不会占用用户的内存和流量,通过…

“AI复活”背后的数字永生:被期待成为下一个电商,培育市场认知和用户心智还需时间

“AI复活”背后的数字永生:被期待成为下一个电商,培育市场认知和用户心智还需时间© 由 九派新闻 提供 数字永生,还是电子宠物?过去一个月,因包小柏用AI技术让爱女在数字世界“复活”一事,《流浪地球2…

什么样的数据库才是开发者需要的

什么样的数据库才是开发者需要的 什么是Serverless数据库Serverless数据库应该关注哪些技术要点DBA的工作会被AI取代吗什么样的数据库是你目前最需要的 其实关于数据库的话题,能聊的很多,作为开发者来说,单说自己接触过的或者曾经用过的数据库…

一套C#自主版权+应用案例的手麻系统源码

手术麻醉信息管理系统源码,自主版权应用案例的手麻系统源码 手术麻醉信息管理系统包含了患者从预约申请手术到术前、术中、术后的流程控制。手术麻醉信息管理系统主要是由监护设备数据采集子系统和麻醉临床系统两个子部分组成。包括从手术申请到手术分配&#xff0c…

FJSP:蜣螂优化算法( Dung beetle optimizer, DBO)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

一、柔性作业车间调度问题 柔性作业车间调度问题(Flexible Job Shop Scheduling Problem,FJSP),是一种经典的组合优化问题。在FJSP问题中,有多个作业需要在多个机器上进行加工,每个作业由一系列工序组成&a…

实时计算平台设计方案:913-基于100G光口的DSP+FPGA实时计算平台

基于100G光口的DSPFPGA实时计算平台 一、产品概述 基于以太网接口的实时数据智能计算一直应用于互联网、网络安全、大数据交换的场景。以DSPFPGA的方案,体现了基于硬件计算的独特性能,区别于X86GPU的计算方案,保留了高带宽特性&…

学习鸿蒙基础(12)

目录 一、网络json-server配置 (1)然后输入: (2)显示下载成功。但是输入json-server -v的时候。报错。 (3)此时卸载默认的json-server (4)安装和nodejs匹配版本的js…

JS-25-浏览器和浏览器对象

一、浏览器 由于JavaScript的出现就是为了能在浏览器中运行,所以,浏览器自然是JavaScript开发者必须要关注的。 目前主流的浏览器分这么几种: IE 6~11:国内用得最多的IE浏览器,历来对W3C标准支持差。从IE10开始支持E…

idea常用配置

IDEA设置全局配置 参考:IDEA设置全局配置_idea如何打开一个项目,全局设置-CSDN博客 idea提交代码到git或svn上时,怎么忽略.class、.iml文件和文件夹等不必要的文件 参考:idea提交代码到git或svn上时,怎么忽略.class、.iml文件和文…

TPM如何培养员工成为设备的主人?

近年来,如何确保这些设备的高效、稳定运行,成为了企业持续发展的关键。全面生产维护(Total Productive Maintenance,简称TPM)作为一种先进的管理理念,强调全员参与设备维护和管理,将员工培养成为…

java集成阿里云短信服务模版并发送短信

配置 全部配置成功后可以获取到对应的模版code pom.xml <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.1.1</version></dependency><dependency><groupId>…