每天一个知识点(五)两个对象的 hashCode()相同,则 equals()也一定为 true吗?

简介: 两个对象的 hashCode()相同,则 equals()也一定为 true吗?

微信搜索《Java鱼仔》,每天一个知识点不错过


(一)每天一个知识点


两个对象的 hashCode()相同,则 equals()也一定为 true吗?


(二)结论


这是一道很常见并且很简单的面试题,这道题的结论:


两个对象的hashCode()相同,equals()不一定为true;


两个对象的equals为true,则两个对象的hashcode一定为true;


(三)再多学一点


首先我们来了解一下hashCode()方法是干什么的,hashCode的存在主要是用于查找的快捷,比如我们常用的HashMap等集合,hashCode用来在散列的存储结构中确定对象的存储地址。


java中所有的对象都有一个父类Object,而Object有一个hashCode方法,Java的所有类都有hashcode方法。


我们来看看hashcode的计算方法:


for (Objectelement : a)
result=31*result+ (element==null?0 : element.hashCode());

hashcode其实就是对一个对象中的每个元素进行一次运算生成的结果值,两个不同的对象是有可能出现同一个hash值的。


比如下面两个字符串:


Strings1="Ma";
Strings2="NB";
System.out.println(s1.hashCode()==s2.hashCode());  //trueSystem.out.println(s1.equals(s2));  //false

虽然两个Ma和NB两个字符串不同,但是他们有相同的hashcode值2484。


创建实体类的时候如果要使用hashCode方法或equals方法时需要在实体类中重写:

@Overridepublicbooleanequals(Objecto) {
if (this==o) returntrue;
if (o==null||getClass() !=o.getClass()) returnfalse;
Useruser= (User) o;
returnObjects.equals(name, user.name) &&Objects.equals(age, user.age);
}
@OverridepublicinthashCode() {
returnObjects.hash(name, age);
}

同理,实体对象同样存在两个不同对象存在同一个hash值的情况。

相关文章
|
8月前
|
存储 Java 程序员
equals方法深入解析
equals方法深入解析
142 0
|
8月前
|
算法 Java 索引
equals方法和hashCode方法之间的那些事(1.1)
equals方法和hashCode方法之间的那些事(1.1)
|
8月前
|
存储 算法 Java
Java 中的 == 运算符、equals 方法和 hashCode 方法
HashMap 中键是不可以重复的,因此它的键就必须是不同的对象,那么这个时候就先用计算速度快的 hashCode 进行比较,若哈希值都不相等,那么这两个对象必然不相等,若是相等的,那么这个就有两种可能出现,一种情况是这两个对象是真的相等,另外一种情况就是出现了罕见的“哈希冲突”现象,那么这个时候就轮到 equals 来进行判断了!在 HashMap 中,键是不可以重复的,也就是说,它们的键都是不相同的,因此就要判断不同对象是否为同一对象。因此,哈希值可以用于判断两个对象是否不等。
70 1
|
Java
Java 最常见的面试题:两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
136 0
|
存储 Java
“==”和equals 最大的区别
“==”和equals 最大的区别是 “==”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。 equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值。
|
存储 Java
详解“==”和equals的区别
“==”和equals 最大的区别是 “==”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。 equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值。
|
存储
"=="和 equals 方法究竟有什么区别?
"=="和 equals 方法究竟有什么区别?
94 0
|
存储 NoSQL
简单讲一下 HashCode() 与 equals()方法
简单讲一下 HashCode() 与 equals()方法.
88 0
hashCode和equals的区别
hashCode和equals的区别
278 0
|
Java 索引
hashCode和equals的区别(一)
Hello,大家好,我是子悠,作为本周的小编我已经不想跟大家介绍自己了,这篇文章让我们跟随 Jay Pan( 哇,一位新作者哦)的步伐学习知识吧。下面是正文。 有面试官会问:你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?equals和hashCode都是Object对象中的非final方法,它们设计的目的就是被用来覆盖(override)的,所以在程序设计中还是经常需要处理这两个方法。下面我们一起来看一下,它们到底有什么区别,总结一波!