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

对于引用类型:==比较的是两个引用是否相同(所指的是否为同一个对象),注:如果两个引用所指的对象内容一样,但是不是同一个对象(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.mzph.cn/bicheng/6709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MYSQL数据目录结构上篇-表在文件系统中表示

前言感悟:我个人是比较不喜欢只会用,不太懂为什么的这么用,而且有的时候很多官方术 语让人难以读懂, 这里我会用比较大白话的方式,让我自己也能让网友们更加理解,如果书写哪里有误,欢迎大家指出((,,•ω•)ノ"(っω•`。)) 从入门开始啦推荐一个学习mysql的视频…

在GPU上加速RWKV6模型的Linear Attention计算

精简版:经过一些profile发现flash-linear-attention中的rwkv6 linear attention算子的表现比RWKV-CUDA中的实现性能还要更好,然后也看到了继续优化triton版本kernel的线索。接着还分析了一下rwkv6 cuda kernel的几次开发迭代以此说明对于不懂cuda以及平时…

c++ 读取输入加速

c 在处理大规模输入输出时cin会很慢, 可能需要使用scanf 代码 这时候就需要使用下面的函数来加速cin 的输入 代码 static const auto io_sync_off[](){ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);return nullptr; }();使用例子 static con…

基于Springboot的房屋租赁管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的房屋租赁管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

【机器学习】Ctrl-Adapter:视频生成领域的革新者

Ctrl-Adapter:视频生成领域的革新者 一、ControlNets的挑战与Ctrl-Adapter的应运而生二、Ctrl-Adapter的技术原理与实现三、Ctrl-Adapter的应用实例与性能表现四、Ctrl-Adapter的意义与未来展望 随着人工智能技术的飞速发展,图像与视频生成领域正经历着前…

【busybox记录】【shell指令】cksum

目录 内容来源: 【GUN】【cksum】指令介绍 【busybox】【cksum】指令介绍 【linux】【cksum】指令介绍 使用示例: 计算校验和 - 传统输出格式 默认输出 - 基础POSIX标准32位CRC校验和 其他校验指令对参数有更好的支持,请看其他校验指…

一篇文章带你深入了解“指针”

一篇文章带你深入了解“指针” 内存和地址了解指针指针类型const修饰指针指针的运算指针与整数之间的运算指针与指针之间的运算指针的关系运算 void* 指针传值调用和传址调用数组和指针的关系野指针野指针的形成原因规避野指针 二级指针字符指针指针数组数组指针数组传参一维数…

灌溉机器人 状压dp

灌溉机器人 题目描述 农田灌溉是一项十分费体力的农活,特别是大型的农田。小明想为农民伯伯们减轻农作负担,最近在研究一款高科技——灌溉机器人。它可以在远程电脑控制下,给农田里的作物进行灌溉。 现在有一片 N 行 M 列的农田。农田的土…

Java Jackson-jr 库是干什么用的

Jackson-jr 是一个轻量级的Java JSON 处理库。这个库被设计用来替代 Jackson 的复杂性。对比 Jackson 的复杂 API,Jackson-jr 的启动速度更快,包大小更小。 虽然Jackson databind(如ObjectMapper)是通用数据绑定的良好选择&#…

三维重建(SFM)与实时定位建图(SLAM)的区分与联系

1、SLAM SLAM是Simultaneous Location and Mapping,同时定位与地图构建。是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。目的是解决自主机器人“定位”和“建图”两个问题…

AI学习指南-学习AI需要的编程基础

亲爱的AI初学者们,欢迎来到人工智能的奇妙世界!🚀 在这篇博客中,我将带你了解学习人工智能所需的编程基础。不用担心,我会尽量用简单易懂的方式来解释,让你即使是编程新手也能轻松上手! 1. Pyt…

OpenCV多张图片堆叠显示

OpenCV实现多张图片堆叠显示 程序思路效果代码 程序思路 读取两张或多张图片;获取图片尺寸;选择多张图片中较大的宽度和高度建立画布;合并图片到画布; 效果 代码 import cv2 import numpy as np# 读取两张图片 img1 cv2.imrea…

计算机网络中常用的网络协议

计算机网络中的网络协议可以按照其功能和作用的不同分为多种类型,常见的网络协议包括 传输层协议: TCP (Transmission Control Protocol):传输控制协议,提供可靠的数据传输服务,保证数据的完整性和顺序性。UDP (User D…

C# Web控件与数据感应之 TreeView 类

目录 关于 TreeView 一些区别 准备数据源 范例运行环境 一些实用方法 获取数据进行呈现 ​根据ID设置节点 获取所有结点的索引 小结 关于 TreeView 数据感应也即数据捆绑,是一种动态的,Web控件与数据源之间的交互,本文将继续介绍与…

mysql设置允许其他IP访问

文章目录 更改mysql配置文件登录mysql 更改mysql配置文件 查找.ini或者.cnf文件 更改bind-address为0.0.0.0 [mysqld] character-set-serverutf8mb4 bind-address0.0.0.0 default-storage-engineINNODB [mysql] default-character-setutf8mb4 [client] default-character-s…

服务器并发编程--libevent

文章目录 一、Libevent概述1.两个重要的结构体2.libevent常用接口 二、libevent IO事件三、libevent信号事件四、libevent高并发服务器参考 一、Libevent概述 Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动&…

redis集群-主从机连接过程

首先从机需要发送自身携带的replid和offset向主机请求连接 replid:replid是所有主机在启动时会生成的一个固定标识,它表示当前复制流的id,当从机第一次请求连接时,主机会将自己的replid发送给从机,从机在接下来的请求…

LAME及 iOS 编译

文章目录 关于 LAME编译 for iOS 关于 LAME 官网:https://lame.sourceforge.io LAME是根据LGPL许可的高质量MPEG音频层III(MP3)编码器。 LAME的开发始于1998年年中左右。Mike Cheng 最开始将它作为针对8hz-MP3编码器源的补丁。在其他人提出…

Redis(九)渐进式遍历 | 数据库管理

文章目录 前言什么是渐进式遍历SCAN数据库管理 前言 前面我们学习了针对 redis 五种基本数据类型和五种特殊数据类型的常用命令,其中通用命令 keys pattern 我们都知道是用来查询当前 redis 服务器中有哪些 key 的,而如果此时 redis 服务器中存在很多的…

Pspnet

Pyramid Scene Parsing Network