【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.rhkb.cn/news/300077.html

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

相关文章

MySQL复制拓扑1

文章目录 主要内容一.安装MySQL服务器1.MySQL 安装程序和其它文件保存在下发的 mysql8-files.iso 镜像文件中,可以使用虚拟光驱来提取到 Linux 文件系统。代码如下(示例): 2.将 MySQL8.0 程序解压到 /opt 目录,再创建到 MySQL 默认…

NIUSHOP完美运营版商城 虚拟商品全功能商城 全能商城小程序 智慧商城系统 全品类百货商城

完美运营版商城/拼团/团购/秒杀/积分/砍价/实物商品/虚拟商品等全功能商城 干干净净 没有一丝多余收据 还没过手其他站 还没乱七八走的广告和后门 后台可以自由拖曳修改前端UI页面 还支持虚拟商品自动发货等功能 挺不错的一套源码 前端UNIAPP 后端PHP 一键部署版本 源码免费…

自然语言处理NLP概述

大家好,自然语言处理(NLP)是计算机科学领域与人工智能领域中的一个重要方向,其研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。本文将从自然语言处理的本质、原理和应用三个方面,对其进行概述。 一、NLP的本质 NLP是一种…

【数据结构与算法】力扣 19. 删除链表的倒数第 N 个结点

题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入: head [1,2,3,4,5], n 2 输出: [1,2,3,5]示例 2: 输入: head [1], n 1 输出: []示例…

【算法】两数之和(暴力求解+哈希表)

本题来源---《两数之和》。 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里…

一种遥感影像多类变化检测方法

多任务学习孪生网络的遥感影像多类变化检测 马惠1, 刘波2, 杜世宏2 1.河南省国土空间调查规划院,郑州 450016 2.北京大学遥感与地理信息系统研究所,北京 100871 摘要: 精确掌握土地覆盖/利用的变化及变化类型对国土空间规划、生态环境监测、灾害评估等有着重要意义,然而现有…

【Unity每日一记】如何让Sprite精灵图集的背景图层变成透明,方便切割

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

微信小程序上传到gitee

共三步 1、新建gitee仓库 点号,新建仓库,填入仓库信息新建即可 2、修改版本管理参数 微信开发者工具中点开版本管理,未初始化,需要先点初始化 接下来将设置中的通用、网络认证、远程3个部分的参数填写好 通用:核对…

前端零基础学习web3开发

目录 1 钱包 2 发起交易 3 出块 4 块高 5 矿工 6 Gas费 这一节,我们不说让人神往的比特币,不说自己会不会利用这个虚拟的货币来发财,也不说那些模模糊糊的知识,什么去中心化啦,什么奇妙的加密啦,我们…

论文笔记:Detecting Pretraining Data from Large Language Models

iclr 2024 reviewer评分 5688 1 intro 论文考虑的问题:给定一段文本和对一个黑盒语言模型的访问权限,在不知道其预训练数据的情况下,能否判断该模型是否在这段文本上进行了预训练 这个问题是成员推断攻击(Membership Inference Attacks&…

1.8.4 卷积神经网络近年来在结构设计上的主要发展和变迁——Inception-v2 和Inception-v3

1.8.4 卷积神经网络近年来在结构设计上的主要发展和变迁——Inception-v2 和Inception-v3 前情回顾: 1.8.1 卷积神经网络近年来在结构设计上的主要发展和变迁——AlexNet 1.8.2 卷积神经网络近年来在结构设计上的主要发展和变迁——VGGNet 1.8.3 卷积神经网络近年来…

Python小白入门教程:手把手教你安装最新版本Anaconda及运行第一个程序

1、Anaconda是什么? 其实通过百度搜索就能了解到,再次可以看下它自己官网的介绍:如下 简单的说,它就是一个集成的管理软件,管理很多工具包 2、为什么安装Anaconda? 简单的说,就是为了方便&am…

Open3D (C++) 计算点云的特征值特征向量

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 针对整个点云 P = { p i } i

面试算法-139-盛最多水的容器

题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。…

科技云报道:卷完参数卷应用,大模型落地有眉目了?

科技云报道原创。 国内大模型战场的比拼正在进入新的阶段。 随着产业界对模型落地的态度逐渐回归理性,企业客户的认知从原来的“觉得大模型什么都能做”的阶段,已经收敛到“大模型能够给自身业务带来什么价值上了”。 2023 年下半年,不少企…

mac老版本如何升级到最新版本

mac老版本如何升级到最新版本 老macbook升级新版本(Big sur、Monterey) 首先介绍我的电脑的机型及情况: 2015年初的MacBook Air 处理器是1.6Hz 双核Interl Core i5 内存4G 老版本只能升到10.13 想要升到最高版本的原因:想要注册…

JVM 组成

文章目录 概要JVM 是 Java程序的运行环境(java二进制字节码的运行环境)JVM 的主要组成部分运行流程:程序计数器堆元空间方法区常量池运行时常量池 概要 JVM 是 Java程序的运行环境(java二进制字节码的运行环境) 好处&…

【排列回溯】Leetcode 46. 全排列 47. 全排列 II

【排列回溯】Leetcode 46. 全排列 47. 全排列 II 46 全排列——used数组上下层保证不取重复的即可47. 全排列 II——used去重上下层,再去重本层重复元素 46 全排列——used数组上下层保证不取重复的即可 ---------------🎈🎈题目链接&#x…

MySQL复制拓扑2

文章目录 主要内容一.配置基本复制结构1.分别在三台主机上停止mysqld服务,并对状态进行确认:代码如下(示例): 2.对三个MySQL服务器的配置文件分别进行编辑,在[mysqld] 选项组中添加以下红色条目:3.在数据目…