深入了解==和equals的区别

news/2024/11/20 2:23:42/
1. 浅说==和equals的区别

(1)比较的类型 不一样

== 可以比较基础数据类型和引用类型,比较基础数据类型的数据时比较的是值,比较引用对象时比较的是引用的地址。

equals比较引用类型,默认比较的是两个引用对象的引用地址,重写后可以比较属性值是否相同。

(2)是否可以重写

== 不能重写,因为它只是简单的运算符。

equals 可以被重写,重写后可以比较对象的属性值是否相同。

2. 重新认识 equals 

equals方法默认是Object的equals方法,比的还是引用地址。

equals 方法重写之后,比的就可以是属性值了

其中Objects.eqquals方法如下

小结:所以默认的重写equals方法既对比属性值也比较引用地址。

3. equals 方法重写方式有哪些

(1)使用getClass对比

(2)使用instanceof对比

小结:使用getClass 比 使用instanceof 安全。(具体原因还不是很清楚,参考【Java基础】重写equals方法详讲_@来杯咖啡的博客-CSDN博客)

4. 重写equals方法 时是否需要重写hashCode方法

其实hashCode方法不一定要重写,但是一般要求将equals方法和hashCode方法同时重写。

5. hashCode的作用

hashCode的作用就是为了方便检索数据。

6. hashCode 是如何计算的

Object的hashCode 是native的,底层用C++写的,看不到源码。

7. hashCode 是否会相同

答案是会。

上图中可以看出结果两个引用对象user1和user2的hashCode 相同。那是因为重写equals的时候重写了hashCode方法了。重写的 hashCode如下:

但重写后的hashCode计算方法是这样的:

java.util.Arrays的hashCode方法

所以,重写后hashCode 是重新散列而来,散列算法一样,属性值也一样,所以hashCode相同。

 8. hashCode 值 相同优缺点(说法待改进)

优点:对比对象时需要两个对象相同。

缺点:当引用类型对象做HashMap这样的集合类的key时,就不需要hashCode相同了。

9. hash 冲突

hash冲突是怎么产生的?

10. 解决hash 冲突


http://www.ppmy.cn/news/1112840.html

相关文章

python:优化一EXCEL统计用类封装一下

# encoding: utf-8 # 版权所有 2023 涂聚文有限公司 # 许可信息查看: # 描述: # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 311 # Datetime : 2023/9/17 5:40 # User : geovindu # Product : PyCharm # Proj…

redis info 详解(InsCode AI 创作助手)

redis info 详解 选项说明: Redis的INFO命令返回了关于Redis服务器的各种信息和统计数据,这些信息可以帮助您监控和管理Redis实例。INFO命令的输出是一个包含多行文本的字符串,包括了各种不同的信息类别。以下是一些常见的INFO命令输出中包…

[运维|数据库] PostgreSQL数据库对MySQL的 READS SQL DATA 修饰符处理

在 PostgreSQL 中,访问权限通常是通过数据库角色和表级别的权限进行管理,而不需要类似 MySQL 中的 READS SQL DATA 修饰符。 要在 PostgreSQL 中管理数据库对象的访问权限,您可以使用以下 SQL 命令: GRANT:授予用户或…

CS5817规格书|CS5817芯片参数|多功能便携式显示器方案芯片规格

CS5817支持最高4K 60Hz是集睿致远(ASL) 新推出的多功能显示控制器芯片,CS5817产品可应用于便携显示器、电竞显示器、桌面显示器、一体式台式机和嵌入式显示系统。 Type-C/DP/HDMI2.0输入转LVDS/eDP/VBO 芯片, 高度集成了多种输入输出接口, 并…

华为云云耀云服务器 L 实例评测|配置教程 + 用 Python 简单绘图

文章目录 Part.I IntroductionChap.I 云耀云服务器 L 实例简介Chap.II 参与活动步骤 Part.II 配置Chap.I 初步配置Chap.II 配置安全组 Part.III 简单使用Chap.I VScode 远程连接华为云Chap.II 简单绘图 Reference Part.I Introduction 本篇博文是为了参与华为“【有奖征文】华…

PyTorch深度学习(二)【反向传播、用pytorch实现线性回归】

反向传播 弄一个简单点的,两层的神经网络: 加入激活函数:(不加激活函数的神经网络就是一个线性回归模型) 用到的损失函数: pytorch里面的数据存储:tensor,它可以存标量、向量、矩阵、高维度数据…

【Flink实战系列】Hash collision on user-specified ID “Kafka Source”

Hash collision on user-specified ID “Kafka Source” 在使用 fromSource 构建 Kafka Source 的时候,遇到下面的报错,下面就走进源码,分析一下原因。 Exception in thread "main" java.lang.IllegalArgumentException: Hash collision on user-specified ID &…

火山引擎 ByteHouse:ClickHouse 如何保证海量数据一致性

背景 ClickHouse是一个开源的OLAP引擎,不仅被全球开发者广泛使用,在字节各个应用场景中也可以看到它的身影。基于高性能、分布式特点,ClickHouse可以满足大规模数据的分析和查询需求,因此字节研发团队以开源ClickHouse为基础&…