== 和 equals()区别,equals()重写问题

server/2024/11/15 5:01:25/

对于引用类型:==比较的是两个引用是否相同(所指的是否为同一个对象),注:如果两个引用所指的对象内容一样,但是不是同一个对象(hashcode不一样),依然返回false,随后引入了equals方法(比较的不是对象的地址,而是对象内容【当然前提是要重写equalshashCode方法】

如果不重写Person类下的equals方法,则equals就等效于==,这里返回false(因为两个引用是不同的),如果Person类用了@Data注解(自动重写equals、hashCode、toString方法),则返回true(比较引用指向的地址的内容)

为什么使用equals方法要重写hashCode方法?

Java中任意一个对象都有native的hashCode方法,这个方法在散列集合中会用到,比如HashMap,在添加元素的时候会根据hashCode方法判断元素是否存在,如果存在的话,则再通过equals方法去比较是否是相同的对象,如果相同则直接替换,如果不同(说明发生了哈希冲突),则以链表的形式插入。

HashCode的值默认是JVM随机数生成的,即两个不同的对象,它们的hashcode值可能相同->

哈希冲突。两个相同的对象,它们的hashcode值一定相同,我们不需要考虑。

但两个不同的对象,它们的hashCode值可能相同,这是我们需要考虑的。

hashCode方法:快速定位该元素,在哈希表中是否存在以及存在的位置。

equals方法:比较两个对象是否相同(重写后的)

如果只重写equals不重写hashCode方法:

即使满足A.equals(B) 的两个相同的对象,依旧会被散列到不同的地方(因为hashcode不一样),会存在元素重复。

如果只重写haashCode方法不重写equals方法:

首先通过hashCode方法快速获取在集合中的位置,并且判断当前位置是否有元素存在,不存在的话没事,存在的话调用(没重写的)equals,即==。

综上所所,最好是equals方法和hashCode同时重写。


http://www.ppmy.cn/server/33981.html

相关文章

Linux生产者,消费者模型

Linux生产者消费者模型 Linux生产者消费者模型是一个用于解决生产者和消费者之间强耦合问题的设计模式。这个模型通过引入一个容器(通常是一个阻塞队列)来作为生产者和消费者之间的通信桥梁。 在这个模型中,生产者和消费者彼此之间不直接通…

SpringBoot中阿里OSS简单使用

官方文档:Java跨域设置实现跨域访问_对象存储(OSS)-阿里云帮助中心 1.pom中引入依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version> </dependency> 如…

STM32学习和实践笔记(23):PWM输出的配置

PWM可以看作是定时器功能中其中一个子功能&#xff0c;配置步骤与前面定时器的方式类似。相关库函数也同样在tim.c里。 3.PWM输出配置步骤 &#xff08;1&#xff09;使能定时器及端口时钟&#xff0c;并设置引脚复用器映射。 a) RCC_APB1PeriphClockCmd(RCC_APB1Pe…

windows驱动开发-PNP设备的启动/停止/删除

和PNP相关的IRP非常多&#xff0c;遗憾的是&#xff0c;它们并非都是必需的&#xff0c;所以这里仅仅给出一些常规实现功能的相关讲解&#xff0c;在那之前我们先看一下所有相关的IRP: 注意不会关注基于FDO的子总线的情况&#xff0c;这个最可能得应用是指的是UDE&#xff0c;但…

neo4j导出导入数据库

neo4j导出导入数据库 脚本 # -*- encoding: utf-8 -*- """File : neo4j_import.pyTime : 2023/09/04 22:31:38Author : mkid Version : 1.0Note : neo4j数据导入导出脚本 """from py2neo import Graph, Node, Relationshi…

程序员搞副业时,用到的一些工具

使用「兔小巢」处理用户反馈 市面上管理用户反馈的产品很多&#xff0c;不过大部分都是收费的&#xff1b;这里我们介绍下自己在用的、腾讯出品的免费工具「兔小巢」。 这个产品最大的用户就是腾讯自己&#xff0c;原来叫「吐个槽」&#xff0c;最近才升级并更名为「兔小巢」。…

史上最全产品经理书单

Tips&#xff1a;我根据行业传颂度、可读性、豆瓣评分、大牛推荐等几个维度&#xff0c;将书分为必看、推荐看、可看此A/B/C三类。A、B类推荐购买&#xff0c;C类可依据个人喜好酌情购买。 1.产品经理经典必读类 《用户体验要素&#xff1a;以用户为中心的产品设计》 A类&…

Transformer和TensorFlow的区别

Transformer和TensorFlow是两个不同层面的概念&#xff0c;Transformer是一种深度学习模型架构&#xff0c;而TensorFlow是一个开源的机器学习框架&#xff0c;可以用来实现包括Transformer在内的各种深度学习模型。 Transformer Transformer模型最初是在2017年的论文《Atten…