Java中重写equals并重写hashcode方法的描述
1.两个对象的hashCode()相同,equals()不一定为true
(1)重写equals()的同时,重写hashCode()
a.定义Person类,私有属性name,age;有参构造,set/get方法;

b.重写equals()、hashCode()方法

c.测试:

d.运行结果:

结论:
1.如果两个对象的hashcode值相等,有两种情况:
a.两个对象是同一个对象,执行equals()中if(this==o);
b.两个对象计算得出的hashcode值相同,发生了hash冲突。
综合代码示例得出:两个对象的hashCode()相等时,其equals()不一定相等(需注意hashcode的重写规则)。
2.如果两个对象的equals为true,则其hashcode值也必然相同
a.两个对象是同一个对象,使用==进行地址比较;
b.equals()中,return返回的是age属性的地址比较以及使用Objects类中的equals方法进行比较;
1)Objects类中的equals方法

2)Object类中的equals方法

可以得出,equals()中返回值的比较实际是进行地址比较,当equals()相等时,说明这两个对象是同一个对象,则其hashcode使用相同方法计算得出的值也相同。
综合示例得出: 如果两个对象的equals为true,则其hashcode值也必然相同。
对象的hashCode()计算:以Person类为例,其中age是int类型,其hashcode值就是其数值大小;name是String类型,其通过hash(name)进行计算。
Java中重写equals并重写hashcode方法的描述的更多相关文章
- Java基础系列-equals方法和hashCode方法
原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述 equals方法和hashCode方法都是有Object类定义的. publi ...
- HashSet中存方用户自己定义数据类型数据,重写equals方法和hashCode方法
import java.util.Set; import java.util.HashSet; public class SetTest { public static void main(Strin ...
- Hibernate中为什么要重写equals方法和hashcode方法
1.*为什么要重写equals方法,首先我们来看一下equals源码: public boolean equals(Object anObject) { if (this == anObject) { ...
- JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法
在实际应用中经常会比较两个对象是否相等,比如下面的Address类,它有两个属性:String province 和 String city. public class Address { priva ...
- Java重写equals方法和hashCode方法
package com.ddy; public class User { private Integer id; private String name; private St ...
- HashSet中的元素必须重写equals方法和hashCode方法
http://jingyan.baidu.com/article/d5a880eb8fb61d13f147cc99.html 1.为什么必须重写这两个方法. 2.什么事hashSet去重,符合什么样的 ...
- 对象作为 map 的 key 时,需要重写 equals 方法和 hashCode 方法
对象作为 map 的 key 时,需要重写 hashCode 和 equals方法 如果没有重写 hashCode 方法,那么下面的代码示例会输出 null 我们首先定义一个对象:BmapPoint, ...
- 浅谈Java中的equals和==与hashCode
转载:https://www.cnblogs.com/dolphin0520/p/3592500.html 参考:http://blog.csdn.net/yinzhijiezhan/article/ ...
- java中==和equals的不同使用方法
System.out.println("input a charact a "); Scanner input2 = new Scanner(System.in); St ...
- Java中的equals和hashCode方法
本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要 ...
随机推荐
- python3.9的nogil版本编译pytorch2.0.1源码报错——失败
关于python3.9的nogil版本参看: PEP 703作者给出的一种no-GIL的实现--python3.9的nogil版本 ================================== ...
- JUC高并发编程(一)之请求合并案例
1.背景 在做活动或者抢购场景,系统查询的请求并发量非常高 如果并发的访问数据库,会给数据库带来很大的压力, 这时候我们可以考虑将多个查询请求合并成一个查询请求返回给客户端, 比如:根据id查询爆款产 ...
- IntersectionObserver + scrollIntoView 实现电梯导航
电梯导航也被称为锚点导航,当点击锚点元素时,页面内相应标记的元素滚动到视口.而且页面内元素滚动时相应锚点也会高亮.电梯导航一般把锚点放在左右两侧,类似电梯一样.常见的电梯导航效果如下,比如一些官方文档 ...
- 轻松易懂,一文告诉你什么是http协议?
阅读本文之前,请详细阅读以下几篇文章: <一文包你学会网络数据抓包> <教你如何抓取网络中的数据包!黑客必备技能> 一.什么是http? Http协议即超文本传送协议 (HTT ...
- Go 匿名字段介绍
在 Go 语言中,结构体(struct)是一种用于将多个不同类型的数据组合在一起的数据结构.你提到的语法: type RiderNode struct { service.SimpleService ...
- SpringBoot定时任务实现数据同步
业务的需求是,通过中台调用api接口获得,设备数据,要求现实设备数据的同步. 方案一:通过轮询接口的方式执行 pullData() 方法实现数据同步 该方式的原理是先清空之前的所有数据,然后重新插入通 ...
- springCloud allibaba 微服务引言
微服务篇: springcloud 常见组件有哪些 nacos 的服务注册表结构是怎样的 nacos 如何支撑阿里内部数十万服务注册压力 nacos 如何避免并发读写冲突问题 nacos 和eurek ...
- 通过C#在Word中插入或删除分节符
在Word中,分节符是一种强大的工具,用于将文档分成不同的部分,每个部分可以有独立的页面设置,如页边距.纸张方向.页眉和页脚等.正确使用分节符可以极大地提升文档的组织性和专业性,特别是在长文档中,需要 ...
- 使用Vue3.5的onWatcherCleanup封装自动cancel的fetch函数
前言 在欧阳的上一篇 这应该是全网最详细的Vue3.5版本解读文章中有不少同学对Vue3.5新增的onWatcherCleanup有点疑惑,这个新增的API好像和watch API回调的第三个参数on ...
- Redis、Nginx、SQLite、Elasticsearch等开源软件成功的原因及他们对IT技术人员的启示
引言 这些年在自研产品,对于如何做好产品进行了一些思考.随着开源软件的蓬勃发展,许多开源项目已经成为IT行业的核心组成部分.像Redis.Nginx.SQLite.Elasticsearch这些知名的 ...