文档章节

为什么要重写equals()方法?

o
 osc_wws45aot
发布于 2019/08/20 18:10
字数 371
阅读 0
收藏 0

精选30+云产品,助力企业轻松上云!>>>

因为默认equals在比较两个对象时,是看他们是否指向同一个地址的。但有时,我们需要两个不同对象只要是某些属性相同就认为它们equals()的结果为true。比如:

person p1?= new person(1,"name");
person p2 = new person(1,"name");
如果不重写equals的话,他们是不相同的,所以我们要重些equals,判断只要他们的id和名字相同equals就为true,在一些集合里有时也这样用,集合里的contain也是用equals来比较

?

先来看Object关于equals()的源码:

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

重写需要注意的属性:
equals方法实现了一个等价关系(equivalence relation)。它有以下这些属性:
? 自反性:对于任何非空引用x,x.equals(x)必须返回true。
? 对称性:对于任何非空引用x和y,如果且仅当y.equals(http://www.amjmh.com/v/BIBRGZ_558768/)返回true时x.equals(y)必须返回true。
? 传递性:对于任何非空引用x、y、z,如果x.equals(y)返回true,y.equals(z)返回true,则x.equals(z)必须返回true。
? 一致性:对于任何非空引用x和y,如果在equals比较中使用的信息没有修改,则x.equals(y)的多次调用必须始终返回true或始终返回false。
? 非空性: 对于任何非空引用x,x.equals(null)必须返回false。
当重写equals方法时,同时也要重写hashCode方法。
————————————————

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
hashcode()和equals()的是是非非

我们在很多博客的文章当中,我们都看到这样一句话:在重写equals方法的同时一定要重写hashCode方法。这是为什么?很多人会说,我的业务代码,只用equals比较比较两个对象是否相等不就可以了,...

似是而非Sage
2016/08/18
83
0
关于重写equals()和hashCode()的思考__从HashMap源码分析

最近这几天一直对equals()和hashCode()的事搞不清楚,云里雾里的。 为什么重写equals(),我知道。 但是为什么要两个都要重写呢,我就有点迷糊了,所以趁现在思考清楚后记录一下。 通过本文,...

osc_p3rdih8s
04/16
2
0
Java equals 和 hashCode 的这几个问题可以说明白吗?

前言 上一篇文章 如何妙用 Spring 数据绑定? ,灵魂追问 环节留下了一个有关 equals 和 hashcode 问题 。基础面试经常会碰到与之相关的问题,这不是一个复杂的问题,但很多朋友都苦于说明他...

tan日拱一兵
2019/12/23
15
0
Java 如何重写对象的 equals 方法和 hashCode 方法

https://www.cnblogs.com/yuxiaole/p/9570850.html 前言:Java 对象如果要比较是否相等,则需要重写 equals 方法,同时重写 hashCode 方法,而且 hashCode 方法里面使用质数 31。接下来看看各...

强子大叔的码田
2019/09/10
0
0
面试官:换人!他连哈希扣的都不懂

前言 相信你面试的时候,肯定被问过 hashCode 和 equals 相关的问题 。如: hashCode 是什么?它是怎么得来的?有什么用? 经典题,equals 和 == 有什么区别? 为什么要重写 equals 和 hash...

osc_81ub7i61
06/24
2
0

没有更多内容

加载失败,请刷新页面

加载更多

Buffer的创建及使用源码分析——ByteBuffer为例

目录 Buffer概述 Buffer的创建 Buffer的使用 总结 参考资料 Buffer概述 注:全文以ByteBuffer类为例说明 在Java中提供了7种类型的Buffer,每一种类型的Buffer根据分配内存的方式不同又可以分为...

osc_zoa046qb
20分钟前
21
0
《 ZooKeeper : Wait-free coordination for Internet-scale systems 》论文研读

Zookeeper 研读 说明:本文为论文 《 ZooKeeper : Wait-free coordination for Internet-scale systems 》 的个人理解,难免有理解不到位之处,欢迎交流与指正 。 论文地址:Zookeeper Paper...

osc_4isxawz4
21分钟前
19
0
利用__new__实现单例模式

26 利用__new__实现单例模式 python当中有很多方法都可以实现单例模式, 但利用__new__无疑是最推荐的方式. 代码如下: class Demo:is_instance = Nonedef __new__(cls, *args, **kwargs...

_Change_
22分钟前
4
0
如何白嫖微软Azure12个月及避坑指南

Azure是微软提供的一个云服务平台。是全球除了AWS外最大的云服务提供商。Azure是微软除了windows之外另外一个王牌,微软错过了移动端,还好抓住了云服务。这里的Azure是Azure国际不是Azure中...

osc_dwuu5jqk
22分钟前
21
0
Mybatis源码初探——优雅精良的骨架

@ 目录 前言 精良的Mybatis骨架 宏观设计 基础支撑 日志 日志的加载 日志的使用 数据源 数据源的创建 池化技术原理 数据结构 获取连接 回收连接 缓存 缓存的实现 CacheKey 反射 总结 前言 My...

osc_r9wwwi0j
24分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部