== 和 equals 的对比 [面试题]
== 和 equals 的对比[面试题]
文章目录
- == 和 equals 的对比[面试题]
- 1. == 和 equals 简介
- 2. Object 类中 equals() 源码
- 3. String 类中 equals() 源码
- 4. Integer 类中 equals() 源码
- 5. 如何重写 equals 方法
1. == 和 equals 简介
== 是一个比较运算符
- ==:既可以判断基本数据类型,也可以判断引用数据类型
- ==:如果判断基本数据类型,判断的是值是否相等。示例:int i = 10; double d = 10.0; //true
- ==:如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象
- equals:是Object类中的方法,只能判断引用类型,后面我们看jdk源码
- 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。比如:Integer,String[后面看String 和 Integer 的 equals源码]
package com.xjz.object_;import com.xjz.object_.A;
import com.xjz.object_.B;public class Equals01 {public static void main(String[] args) {A a = new A();A b = a;A c = b;System.out.println(a == c); //trueSystem.out.println(b == c); //trueB bObj = a;System.out.println(bObj == c); //trueint num1 = 10;double num2 = 10.0;System.out.println(num1 == num2);//t 基本数据类型,判断值是否相等//equals 方法 ctrl+b 查看源码/*//带大家看看 jdk 的源码 String 类 的 equals方法//把 Object 的 equals 方法重写了,变成了比较两个字符串值是否相同public boolean equals(Object anObject) {if (this == anObject) { //如果是同一个对象return true; //返回 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; //如果两个字符串的所有字符相等,则返回 true}}return false; //如果比较的不是字符串,直接返回 false}*/"hello".equals("abc");String str1 = new String("xjz_2002");String str2 = new String("xjz_2002");System.out.println(str1 == str2); //falseSystem.out.println(str1.equals(str2)); //true//看看 Object 类的 equals 是/*//即 Object 的 equals 方法默认就是比较对象地址是否相同//也就是判断两个对象是不是同一个对象(地址)public boolean equals(Object obj) {return (this == obj);}*/Object obj = new Object();/*//从源码可以看到 Integer 也重写了 Object 的 equals 方法//变成了判断两个值是否相同public boolean equals(Object obj) {if (obj instanceof Integer) { //判断类型return value == ((Integer)obj).intValue(); //向下转型-判断两个值是否相等}return false;}*/Integer integer1 = new Integer(1000);Integer integer2 = new Integer(1000);System.out.println(integer1 == integer2); //falseSystem.out.println(integer1.equals(integer2)); //true}
}class B {
}
class A extends B {
}
2. Object 类中 equals() 源码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7zkO0fB0-1691923643148)(https://gitee.com/programmerLaoXu/cloudimage/raw/master/img/202308131751003.png)]
3. String 类中 equals() 源码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88Xcpt20-1691923643149)(https://gitee.com/programmerLaoXu/cloudimage/raw/master/img/202308131753291.png)]
public boolean equals(Object anObject) {if (this == anObject) { //如果是同一个对象return true; //返回 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; //如果两个字符串的所有字符相等,则返回 true}}return false; //如果比较的不是字符串,直接返回 false}
4. Integer 类中 equals() 源码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bXD8WTnL-1691923643150)(https://gitee.com/programmerLaoXu/cloudimage/raw/master/img/202308131754742.png)]
5. 如何重写 equals 方法
应用实例: 判断两个 Person 对象的内容是否相等,如果两个 Person 对象的各个属性值都一样,则返回 true,反之 false。
package com.xjz.object_;public class EqualsExercise01 {public static void main(String[] args) {Person person1 = new Person("xjz", 20, '男');Person person2 = new Person("xjz", 20, '男');System.out.println(person1.equals(person2)); //True}
}
//判断两个 Person 对象的内容是否相等,
//如果两个 Person 对象的各个属性值都一样,则返回 true,反之 falseclass Person { //extends Objectprivate String name;private int age;private char gender;//重写equals方法,判断对象的内容是否相等public boolean equals(Object obj) {//判断如果比较的两个对象是同一个对象,则直接返回trueif (this == obj) {return true;}//类型判断if (obj instanceof Person) { //是Person,我们才比较//进行 向下转型,因为我需要得到 obj的 各个属性Person person = (Person) obj;return this.name.equals(person.name) && this.age == person.age && this.gender == person.gender;}//如果不是 Person,则直接返回 falsereturn false;}public Person(String name, int age, char gender) {this.name = name;this.age = age;this.gender = gender;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}}相关文章:
== 和 equals 的对比 [面试题]
和 equals 的对比[面试题] 文章目录 和 equals 的对比[面试题]1. 和 equals 简介2. Object 类中 equals() 源码3. String 类中 equals() 源码4. Integer 类中 equals() 源码5. 如何重写 equals 方法 1. 和 equals 简介 是一个比较运算符 :既可以判断基本数据类型…...
SpringBoot集成Redis及Redis使用方法
目录 应用背景 Redis简介 更新问题 一:环境配置 1.1: 在pom.xml文件中添加依赖 1.2:配置SpringBoot核心配置文件application.properties 二:在Config文件夹中创建RedisConfig配置文件类 2.1:RedisTemplate中的几个角色&am…...
Redis可以用作数据库吗?它的适用场景是什么?
是的,Redis可以用作数据库。虽然Redis通常被认为是一个内存数据库(in-memory database),但它也可以通过持久化机制将数据保存在磁盘上,以便在重启后恢复数据。 Redis的适用场景包括但不限于以下几个方面: …...
@Param详解
文章目录 背景什么是ParamParam的使用方法使用方法:遇到的问题及因Param解决了什么问题使用与不使用对比 Param是如何进行映射的总结 背景 最近在开发过程中,在写mapper接口是在参数前加了Param注解,但是在运行的时候就会报错,说…...
自定义分页工具类
前言 在日常的开发工作中,会遇到很多不确定的需求场景,无法使用第三方提供的分页组件来实现,那么如何自己实现一个简单的分页工具类呢? 工具类 第一版本: Setter Getter public class PageTool<T> {/*** 当前…...
文本数据保存
文本数据保存 工具目的代码运行结果 工具 pycharm 目的 网址:https://ljgk.envsc.cn/ 需求:获取到地址(address),公司名字(ps_name),创建的时间(create_time)ÿ…...
Python爬虫:抓取表情包的下载链接
Python爬虫:抓取表情包的下载链接 1. 前言2. 具体实现3. 实现代码 1. 前言 最近发现了一个提供表情包的网址,觉得上面的内容不错,于是就考虑用Python爬虫获取上面表情包的下载链接。整体而言,实现这个挺简单的,就是找到提供表情包…...
(文章复现)基于灰狼算法(GWO)的交直流混合微网经济调度matlab代码
参考文献: [1]高瑜,黄森,陈刘鑫等.基于改进灰狼算法的并网交流微电网经济优化调度[J].科学技术与工程, 2020,20(28):11605-11611. [2]邓长征,冯朕,邱立等.基于混沌灰狼算法的交直流混合微网经济调度[J].电测与仪表, 2020, 57(04):99-107. 这两篇文章不管是从模型、…...
【Kubernetes】Kubernetes的调度
K8S调度 一、Kubernetes 调度1. Pod 调度介绍2. Pod 启动创建过程3. Kubernetes 的调度过程3.1 调度需要考虑的问题3.2 具体调度过程 二、影响kubernetes调度的因素1. nodeName2. nodeSelector3. 亲和性3.1 三种亲和性的区别3.2 键值运算关系3.3 节点亲和性3.4 Pod 亲和性3.5 P…...
题目:2511.最多可以摧毁的敌人城堡数量
题目来源: leetcode题目,网址:2511. 最多可以摧毁的敌人城堡数目 - 力扣(LeetCode) 解题思路: 顺序遍历数组,记录上一个我军城堡和没有城堡的位置。当碰到空位置时,若上一次更新的…...
22 | 书籍推荐数据分析
import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn import neighbors from sklearn.model_selection import train_test_split from sklearn.preprocessing import...
vscode extension 怎么区分dev prod
开发模式注入环境变量 使用vsode 提供的api...
Java学习手册——第一篇Java简介
今后Java学习手册就来给大家梳理JavaSE的基础知识啦, 除了这个专栏我们还有其他专栏:前端、安全、后端等。 希望大家可以在这里一起讨论学习哟~ Java学习手册——第一篇Java简介 1. Java基础知识2. Java能干嘛3. Java基础环境搭建 1. Java基础知识 出生…...
Prometheus流程图(自绘)-核心组件-流程详解
阿丹手绘流程图:图片可能有点小查看的时候放大看看哈! prometheus核心组件 prometheus server Prometheus Server是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。Prometheus Server可以通过静态配置管理…...
回归模型常见评估指标mae,mse,rmse
文章目录 MAE(平均绝对误差)计算公式sklearn实现numpy实现mse(均方误差)计算公式sklearn实现numpy实现rmse(均方根误差)计算公式sklearn实现MAE(平均绝对误差) 计算公式 MAE ( y ,...
服务器数据恢复-断电导致ext4文件系统文件丢失的数据恢复案例
服务器数据恢复环境: 一台服务器挂载一台存储设备,存储中划分一个Lun;服务器操作系统是Linux centos,EXT4文件系统。 服务器故障&分析: 意外断电导致服务器操作系统无法启动,系统在修复后可以正常启动&…...
链表(基础详解、实现、OJ笔试题)
文章目录 🧚什么是链表(链表概念及分类)链表分类单链表和双链表的区别 🚴♂️单链表、双向链表的实现单链表的实现双向链表的实现 🍉链表经典OJ笔试题反转单链表移除链表元素合并两个有序链表链表分割链表的中间结点…...
W5100S-EVB-PICO作为TCP Client 进行数据回环测试(五)
前言 上一章我们用W5100S-EVB-PICO开发板通过DNS解析www.baidu.com(百度域名)成功得到其IP地址,那么本章我们将用我们的开发板作为客户端去连接服务器,并做数据回环测试:收到服务器发送的数据,并回传给服务…...
大数据-玩转数据-Redis 安装与使用
一、说明 大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7. Redis的官方网站地址:http://download.redis.io/releases 二、下载 m…...
实时指标-1日留存率
2个DWD层 登录→kafka注册→kafka1个DWS 弄2条流,从kafka读取数据将昨日注册数据存到状态中,TTL为2天,存到map状态中,key为注册日期,value为set,存储注册的uid将登录流和注册流进行连接来一条登录数据&…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
