当前位置: 首页 > 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将登录流和注册流进行连接来一条登录数据&…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...