Java中==与equals()以及hashCode()

R语言使用mlr包创建回归任务、指定回归学习函数为KNN回归模型、网格搜索、交叉验证调节KNN模型的超参数K获取模型最佳的K值、可视化KNN模型的不同K值和MSE指标之间关系图 阅读详情

    说起==和equals()方法,心里大概明白,若是要详解,可能会有些说不清,hashCode()方法用的不是很多,要说它和equals()方法的联系,一时也说不太清,本篇详细分析一下!

 

*Java中==与equals的区别?

    对于八大基本数据类型(包括数组)的比较,那一定是用==,因为只有引用类型才有方法嘛!所以对于==和equals()方法的讨论仅限于引用类型。

String str1 = new String("aaa");
String str2 = "aaa";
System.out.println(str1 == str2);      //false
System.out.println(str1.equals(str2)); //true

    对于==比较的是引用数据类型的引用是否相等,也就是所指向的内存地址是否一样,根据之前总结的String及常量池的那篇,我们知道str1所指向的内存地址是在堆内存中的,str2是在字符串常量池中的,两者指向的字符串内容都是"aaa",但是地址不同。对于equals()就是比较引用地址所指向的内存地址所对应的内容是否一致,不过这里引用数据类型仅限于String,因为String类型重写了老祖宗Object的equals()方法,Object的equals()方法默认是这样的:

public boolean equals(Object obj) {
    return (this == obj);
}

可以看到,Object的equals()方法底层还是用的==,所以这个equals()方法是等着我们去重写的,补充些的话,和==又有什么区别呢?

 

*hashCode()方法是?

    hashCode()和equals()方法一样都是Object类的方法,一个对象调用hashCode方法会得到一个hashCode值,这个值一般就是一串数字,上个问题中说到equals方法要被重写,不然等同于使用==,不过要记住一点,当equals被覆盖时,hashCode方法也要被覆盖!

    hashCode叫做散列码,也叫做哈希码,其实就是一串数字。看下面这个例子:

String s1 = "hello";
String s2 = new String("hello");
System.out.println(s1.hashCode() + "\t" + s2.hashCode());    //99162322 99162322

两者的结果是一样的,这是为什么呢?请看下面几个关于hashCode方法的知识点:

①对于字符串对象是根据字符内容得出的hashCode,因为这里s1和s2最终指向的都是"hello",字符内容相同,所以得出的哈希码相同。

②如果两个对象通过equals比较是相同的,那么他们调用各自的hashCode方法得出的哈希码也是相同的。

③如果两个对象的哈希码相同,他们则不一定相同,但是如果两个对象是一样的,那他们的哈希码则一定相同。

 

*hashCode在Set集合中的应用?

    Set集合中是不允许元素重复的,那么如何保证集合不重复呢?equals可以比较字符内容,但是当数据较多时,比如有10000和数据,当添加第10001个数据的时候,就要调用10000次equals方法来比较,这样肯定会使效率大大降低,所以就用到了hashCode()方法。

    当添加一个新元素时,首先调用这个元素的hashCode方法,然后得到一个哈希码,然后这个哈希码作为这个元素的存储地址,如果这个哈希码制定的位置上没有元素,就直接存储在这个位置上,如果有元素,就用equals()方法比较,相同则不在存储,不同的话就会产生冲突,这时会产生一个链接表,将这两个元素串起来放在同一个哈希码指定的位置上,而实际上会尽量避免哈希冲突。这样使用hashCode()方法会极大的提升存储效率,所以在集合查找的时候,hashCode会降低元素的比较次数,极大的提高查询效率,一般两个对象,他们的哈希码是不同的,当然之前那个字符串例子是因为字符串内容一样!

 

 

有关equals()方法和hashCode()方法的小结:

①equals()方法和hashCode()方法都是Object中的方法(所有类都继承Object类);在其他类中,这两个类会一起被重写。

②Object中equals()方法比较的是两个对象的内存地址,hashCode返回这个对象的内存地址。

③常见的String等包装类,重写equals()方法来比较对象内容,重写equals来获得哈希码,如果通过equals()方法比较相等,则哈希码相同。

④一般不同的对象,哈希码是不同的。

嵌入式软件工程师面试题目整理(一) 文章目录嵌入式软件工程师面试题目整理(一)Arm有多少32位寄存器?Arm2440和6410有什么区别CPU,MPU,MCU,SOC,SOPC联系与差别上拉&下拉&高阻态串口协议讲一讲RS232和RS485通讯接口有什么区别IIC时序图画一下,IIC有哪些状态,给一个字节,将它发送出去。IIC有什么注意事项?有没有用I/O模拟IIC,如果有需要注意什么?为什么2440的内存起始地址是3后面7个0呢?为什么6410的内存起始地址是5后面7个0呢?内存管理有什么看法?(MMU)锁有哪些?有什么注 阅读详情

相关推荐

基于Java的高校学生信息管理系统的设计与实现(论文+源码)

可以对本系统的数据进行良好的封装,Java可以对不想被访问的数据进行良好的隐藏,具备平台无关性,可移植,更加可靠与安全,具备多线程支持,进行网络交互更容易。它支持本系统的B/S模式。开发效益方面,本系统一旦开发成功并且面向社会,就会让大多数的学生教师体会到便利办公的乐趣,随之促进提高本系统的使用率和经济利润,所以在经济方面,对于零成本开发且高利润的学生管理系统是可行的。学生可以在学生端进行选课,查看自己的成绩,教师可以在教师端查看所任课程的选课情况,对学生成绩进行录入,对所任的课程进行结课等操作。

2402_82389843的博客 1092

Java中hashcode和equals详解

1、hashCode概念 (1)hash与hash表 hash是一个函数,该函数中的实现就是一种算法,就是通过一系列的算法来得到一个hash值。这个时候,我们就需要知道另一个东西,hash表,通过hash算法得到的hash值就在这张hash表中,也就是说,hash表就是所有的hash值组成的,有很多种hash函数,也就代表着有很多种算法得到hash值,后面会以直接取余法来讲。 (2)hashcode 有了前面的基础,这里讲解就简单了,hashcode就是通过hash函数得来的...

wangqsse的博客 4952

AD56XXR系列DAC驱动设计:SPI接口、寄存器配置与嵌入式工程实践

数模转换器(DAC)是嵌入式系统实现高精度模拟控制的核心器件,其性能取决于通信协议可靠性、寄存器配置准确性及硬件协同设计能力。基于SPI总线的电压输出型DAC广泛应用于工业控制、光模块偏置、传感器校准等场景,需兼顾静态精度、动态响应与低功耗特性。AD56XXR系列作为典型集成内部基准与多通道同步更新能力的12/14/16位DAC,支持轨到轨输出与灵活掉电模式,为资源受限MCU提供可移植固件范式。本文围绕SPI时序约束、16位指令字解析、LDAC同步机制及精度补偿策略展开,覆盖从硬件连接、初始化流程到量产级可

weixin_33481022的博客 611

Java中的equals和hashCode方法

正确地实现equals和hashCode方法对于保证Java程序的正确性和性能至关重要。在重写这两个方法时,需要遵循一定的原则,并确保它们之间的一致性。通过重写这两个方法,我们可以自定义对象相等的定义,并使对象能够正确地存储在哈希集合中。

Java&AI小吕布的博客 840

QtNodeEditor实战:构建高效可视化编程环境的完整指南

本文是QtNodeEditor实战的完整指南,详细介绍了如何利用这一基于Qt框架的可视化编程工具构建高效节点编辑器。内容涵盖从快速集成、自定义节点模型到深入理解MVC数据流架构,并提供了样式定制、场景序列化、动态端口等高级功能的实现方法,帮助开发者快速搭建灵活、可维护的可视化编程环境。

lemon的博客 702

golang 线上事故

golang 线上事故 最近公司要做大促的一些活动。并且单量,qps持续上涨。之前使用的是django python 语言做的一个服务端。目前已经部署的国家里面最多的国家会有300+个实例。大促期间还可能会增加一个实例数。这么多的实例部署,回滚的时间都会特变长,除了问题也不好定位。并且如此多的一个机器,连接数* 实例数也会导致DB等其他服务扛不住这么大的并发。所以决定上go服务解决性能问题。 ...

lcf枫的博客 1537

Java基础——HashCode与equals

1、hashCode()介绍: hashCode() 的作⽤是获取哈希码,也称为散列码;它实际上是返回⼀个 int 整数。这个哈希码的作⽤是确定该对象在哈希表中的索引位置。 hashCode() 定义在 JDK 的 Object 类中,这就意味着 Java 中的任何类都包含有 hashCode() 函数。另外需要注意的是: Object 的 hashcode ⽅法是native本地⽅法,也就是⽤ c 语⾔或 c++ 实现的,该⽅法通常⽤来将对象的 内存地址 转换为整数之后返回。 2、为什...

JJBOOM425的博客 1523

深入解析FDTD Script中的farfieldpolar3d命令:复电场计算与应用

本文深入解析了FDTD仿真中`farfieldpolar3d`命令的核心功能与应用。作为`farfield3d`的复数版本,该命令能计算并返回球坐标系下的复电场矢量,完整保留振幅与相位信息,为光学天线设计、近远场变换及偏振态分析等高级应用提供了关键数据基础。

grafana6viz的博客 286

Java中hashCode()与 equals()

当你把对象加入 HashSet时,HashSet会先计算对象的 hashcode 值来判断对象加入的位置,同时也会与其他已经加入的对象的 hashcode 值作比较,如果没有相符的 hashcode,HashSet会假设对象没有重复出现。但是,仅仅当创建并某个“类的散列表”(关于“散列表”见下面说明)时,该类的hashCode() 才有用(作用是:确定该类的每一个对象在散列表中的位置;其它情况下(例如,创建类的单个对象,或者创建类的对象数组等等),类的hashCode() 没有作用。因此,返回true。..

应无所住而生其心 5663

PIV实验流场流速云图(MALAB contour函数用法)

clear;clc; for k=1:5 str1=['filename1']; str2=['filename2']; str3=['filename3']; str=eval(['str',num2str(k)]); load(str); [m n]=size(y); y=flipud(y); v=-v; x=x-x(1,...

Nick_Cui的博客 3223

Python 爬虫实战:抓取应届生求职网校招岗位信息,助力学子就业

应届生求职网作为国内知名的招聘平台,汇聚了大量企业的校招岗位信息。了解这些岗位信息,对于应届毕业生制定求职策略、企业制定招聘计划以及相关就业市场分析等都具有重要意义。因此,本文将深入探讨如何运用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息,为应届毕业生提供有益的就业信息支持。本文深入探究了利用 Python 爬虫技术从应届生求职网平台抓取校招岗位信息的全流程。从前期的环境搭建、模拟登录,到核心的数据抓取、存储,再到后续的数据分析与可视化,都详细展开讲解并提供代码支持。

u014481728的博客 1301

Java基础篇:什么是hashCode 以及 hashCode()与equals()的联系

1、什么是hashCode: hashCode就是对象的散列码,是根据对象的某些信息推导出的一个整数值,默认情况下表示是对象的存储地址。通过散列码,可以提高检索的效率,主要用于在散列存储结构中快速确定对象的存储地址,如Hashtable、hashMap中。 为什么说hashcode可以提高检索效率呢?我们先看一个例子,如果想判断一个集合是否包含某个对象,最简单的做法是怎样的呢?逐一取出集合中的每个元素与要查找的对象进行比较,当发现该元素与要查找的对象进行equals()比较的结果为true时,则停止继续

张维鹏的博客 6万+

Python 爬虫实战:美团大众点评餐厅数据爬取与分析

本文摘要:美团/大众点评餐厅数据爬虫实战指南 本文详细介绍了如何开发一个完整的餐厅数据爬虫系统,涵盖从环境配置到数据可视化的全流程。主要内容包括: 项目目标:爬取餐厅基本信息(名称、评分、价格等)及详情数据,支持市场分析和商业决策 技术方案:使用Python生态工具(Requests、Playwright、Pandas等)构建爬虫系统 核心挑战:破解大众点评的字体反爬机制和美团的API签名验证 实现细节:提供完整的代码示例,包括字体解析、签名生成、请求重试等关键功能 数据应用:支持将结果导出为CSV/Exc

u014481728的博客 319

Java中equals()、hashCode()与==的关系

hashCode是Object类中的一个方法,它返回一个整型数值,这个值被称为哈希码。它的主要用途是为对象提供一个快速比较的依据,特别是在哈希表(如HashMap)中,用于快速定位对象的存储位置。简而言之,hashCode方法的设计目的是提高数据结构中查找、删除和插入元素的效率。

aakhvb的博客 598

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java中的==和equals()方法的区别是?hashCode()和equals()的关系是什么?

equals()`方法比较两个`CustomObject`实例的`id`属性,而`hashCode()`方法基于`id`属性的值计算散列码。这样,具有相同`id`的`CustomObject`实例将具有相同的`hashCode()`值,并且`equals()`方法将返回`true`。在Java中,`hashCode()`方法和`equals()`方法之间存在特定的关系,这种关系对于使用散列数据结构(如`HashMap`、`HashSet`等)时的正确行为至关重要。2. **`equals()`方法:**

Dyan_csdn的博客 1033

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java中 == 、equals()、hashcode()的认识

原文参考:https://www.cnblogs.com/benjieqiang/p/11221751.html、https://blog.youkuaiyun.com/bailu666666/article/details/81153815、https://blog.youkuaiyun.com/qq_38162448/article/details/81611894 一.先来说说Java的基本数据类型和引...

学无止境 273

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java hashCode() 和 equals()和==的区别于联系

文章目录一、“==”与equals()的区别二、hashCode()的作用三、hashCode() 和 equals() 的关系 一、“==”与equals()的区别 == : 它的作⽤是判断两个对象的地址是不是相等。即判断两个对象是不是同⼀个对象(基本数据类型==⽐的是值,引⽤数据类型⽐的是内存地址)。 equals() : 它的作⽤也是判断两个对象是否相等。但它⼀般有两种使⽤情况: 情况 1:类没有重写 equals() ⽅法。则通过 equals() ⽐较该类的两个对象时,等价于通过“=

pp1981002445的博客 158

java ==和equals的区别_一道经典的Java面试题:equals,== 和hashcode()的区别

对于基本类型是值比较,对于引用类型来说是引用比较。/** * == 的比较 */ @Test public void testOne(){ int a = 200; int b = 200; Integer c = 200; Integer d = 200; //值比较 System.o...

weixin_36068796的博客 87

【Java基础】==与equals()的区别?hashCode()与equals()的区别?

【问】

xxdd_123xxx的博客 290

HoRain云--Java中==和equals()的区别?如何重写equals()和hashCode()?

HashMap、HashSet 等依赖 hashCode() 定位桶位,再用 equals() 精确匹配。若未重写,逻辑相等的对象可能因哈希值不同被存入不同桶位,导致集合操作失效。

2401_86544677的博客 702

Java碎片 -- equals()与hashCode()与==

1. equals() 与 hashCode() java.lang.Object类中有两个非常重要的方法: 1. public boolean equals(Object obj) 2. public int hashCode() Object类是类继承结构的基础,所以是每一个类的父类。所有的对象,包括数组,都实现了在Object类中定义的方法。 1.1 equals() equals()方...

lonelyVM的博客 129

java基础 == equals()和hashcode()

基本数据类型和引用数据类型 基本数据类型即 int double long byte boolean short char float 除以上数据类型之外 其他的所以数据类型包括数组和String 都是引用数据类型 不同数据类型的存储位置 基本数据类型 int i=1; 1.1 成员变量(全局变量)即在类中声明的变量 引用和值都存在堆中 1.2 局部变量 即在方法中声明的变量 因为方法的结束栈会销毁 在方法中声明的变量的生命周期也会结束 这就是为什么在方法中声明的变量只在方法中有效的原

cool_and_gentle的博客 152

Java中==操作符和equals()方法的区别?hashCode()方法又是什么?

方法用来获取对象的哈希码(int整数),哈希码是由对象的内存地址或者对象的属性计算出来的。哈希码用于散列存储结构,比如HashMap,HashSet,中确定对象的存储位置。可用于快速比较两个对象是否不同,因为如果它们的哈希码不同,那么它们肯定不相等。==,equals(),hashCode()都是Java中比较对象的方式。不能用于基本数据类型的判断,只能判断两个对象是否相等。

qq_74980411的博客 1073

Java(比较篇)—equals()、hashcode()与==

equals()和hashCode()的关系:①若两个对象相等(equals),那么这两个对象一定有相同的哈希值(hashCode);②若两个对象的哈希值相同,但这两个对象并不一定相等。某些场景的话两个同时使用(后续)对于基本数据类型:==比较的是地址,equals比较的是内容是否相同(将基本数据类型转换为引用数据类型才能比较);对于引用数据类型:分两种情况没有重写equals方法的类,equals和==比较的都是地址;

m0_54230514的博客 287

Java 中hashCode() 、equals() 和==深入解析

文章目录一、==和equals()1.面试题:==和equals()有什么区别?2.equals方法存在的意义二、equals()和hashcode()1.面试题:两个对象的hashcode()相同时,它们进行equals()比较返回一定为true吗? 一、==和equals() 1.面试题:==和equals()有什么区别? 最大不同 equals是方法,==是运算符 = = 基本类型:比较值...

離陸する的博客 637

java hashCode()方法,equals()方法 ==

文章目录1、Object类的equals和hashCode方法2、equals和hashCode方法的作用自己用当作HashSet、HashMap的键3、重写equals和HashCode方法4、数组的equals和hashCode5、list的equals和HashCode6、 对象做key后不要修改 1、Object类的equals和hashCode方法 ==比较两个对象的地址。只有a,b指向同一个对象,才返回true。非常严格,不能被重写。 equals默认和==效果相同。 但是可以重写equals方

longzu233的博客 1196
上一篇: String、StringBuffer与StringBuilder
下一篇: 对象和对象的引用,值传递和引用传递
zl_StepByStep
博客等级 码龄10年 154粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值