当前位置: 首页 > news >正文

== 和 equals 的对比 [面试题]

== 和 equals 的对比[面试题]

文章目录

  • == 和 equals 的对比[面试题]
    • 1. == 和 equals 简介
    • 2. Object 类中 equals() 源码
    • 3. String 类中 equals() 源码
    • 4. Integer 类中 equals() 源码
    • 5. 如何重写 equals 方法

1. == 和 equals 简介

== 是一个比较运算符

  1. ==:既可以判断基本数据类型,也可以判断引用数据类型
  2. ==:如果判断基本数据类型,判断的是值是否相等。示例:int i = 10; double d = 10.0; //true
  3. ==:如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象
  4. equals:是Object类中的方法,只能判断引用类型,后面我们看jdk源码
  5. 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。比如: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注解,但是在运行的时候就会报错,说…...

自定义分页工具类

前言 在日常的开发工作中&#xff0c;会遇到很多不确定的需求场景&#xff0c;无法使用第三方提供的分页组件来实现&#xff0c;那么如何自己实现一个简单的分页工具类呢&#xff1f; 工具类 第一版本&#xff1a; Setter Getter public class PageTool<T> {/*** 当前…...

文本数据保存

文本数据保存 工具目的代码运行结果 工具 pycharm 目的 网址:https://ljgk.envsc.cn/ 需求&#xff1a;获取到地址&#xff08;address&#xff09;&#xff0c;公司名字&#xff08;ps_name&#xff09;&#xff0c;创建的时间&#xff08;create_time&#xff09;&#xff…...

Python爬虫:抓取表情包的下载链接

Python爬虫:抓取表情包的下载链接 1. 前言2. 具体实现3. 实现代码 1. 前言 最近发现了一个提供表情包的网址&#xff0c;觉得上面的内容不错&#xff0c;于是就考虑用Python爬虫获取上面表情包的下载链接。整体而言&#xff0c;实现这个挺简单的&#xff0c;就是找到提供表情包…...

(文章复现)基于灰狼算法(GWO)的交直流混合微网经济调度matlab代码

参考文献&#xff1a; [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.最多可以摧毁的敌人城堡数量

​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;2511. 最多可以摧毁的敌人城堡数目 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 顺序遍历数组&#xff0c;记录上一个我军城堡和没有城堡的位置。当碰到空位置时&#xff0c;若上一次更新的…...

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的基础知识啦&#xff0c; 除了这个专栏我们还有其他专栏&#xff1a;前端、安全、后端等。 希望大家可以在这里一起讨论学习哟~ Java学习手册——第一篇Java简介 1. Java基础知识2. Java能干嘛3. Java基础环境搭建 1. Java基础知识 出生…...

Prometheus流程图(自绘)-核心组件-流程详解

阿丹手绘流程图&#xff1a;图片可能有点小查看的时候放大看看哈&#xff01; prometheus核心组件 prometheus server Prometheus Server是Prometheus组件中的核心部分&#xff0c;负责实现对监控数据的获取&#xff0c;存储以及查询。Prometheus Server可以通过静态配置管理…...

回归模型常见评估指标mae,mse,rmse

文章目录 MAE(平均绝对误差)计算公式sklearn实现numpy实现mse(均方误差)计算公式sklearn实现numpy实现rmse(均方根误差)计算公式sklearn实现MAE(平均绝对误差) 计算公式 MAE ⁡ ( y ,...

服务器数据恢复-断电导致ext4文件系统文件丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 一台服务器挂载一台存储设备&#xff0c;存储中划分一个Lun&#xff1b;服务器操作系统是Linux centos&#xff0c;EXT4文件系统。 服务器故障&分析&#xff1a; 意外断电导致服务器操作系统无法启动&#xff0c;系统在修复后可以正常启动&…...

链表(基础详解、实现、OJ笔试题)

文章目录 &#x1f9da;什么是链表&#xff08;链表概念及分类&#xff09;链表分类单链表和双链表的区别 &#x1f6b4;‍♂️单链表、双向链表的实现单链表的实现双向链表的实现 &#x1f349;链表经典OJ笔试题反转单链表移除链表元素合并两个有序链表链表分割链表的中间结点…...

W5100S-EVB-PICO作为TCP Client 进行数据回环测试(五)

前言 上一章我们用W5100S-EVB-PICO开发板通过DNS解析www.baidu.com&#xff08;百度域名&#xff09;成功得到其IP地址&#xff0c;那么本章我们将用我们的开发板作为客户端去连接服务器&#xff0c;并做数据回环测试&#xff1a;收到服务器发送的数据&#xff0c;并回传给服务…...

大数据-玩转数据-Redis 安装与使用

一、说明 大多数企业都是基于Linux服务器来部署项目&#xff0c;而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7. Redis的官方网站地址&#xff1a;http://download.redis.io/releases 二、下载 m…...

实时指标-1日留存率

2个DWD层 登录→kafka注册→kafka1个DWS 弄2条流&#xff0c;从kafka读取数据将昨日注册数据存到状态中&#xff0c;TTL为2天&#xff0c;存到map状态中&#xff0c;key为注册日期&#xff0c;value为set&#xff0c;存储注册的uid将登录流和注册流进行连接来一条登录数据&…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...