首页 > 编程语言 > 详细

Java中equals方法和hashCode方法的关系

时间:2021-08-23 22:47:22      阅读:27      评论:0      收藏:0      [点我收藏+]

equals()和hashCode()都是Object类中定义的方法,所有类都有这两个方法

Object类中equals方法的代码如下:

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

当不对equals()重写时,默认是使用的是“==”进行对对象的地址进行比较,地址相同则返回true,如下

MyObject a = new MyObject(123);

MyObject b = new MyObject(123);
a.equals(b);// a和b的内容是相同的,但是地址不同,所以equals返回值为false

自定义的类实例进行内容比较时,需要重写equals()方法,而String等类已经重写了equals()方法。

hashCode()方法作用是计算对象的哈希值。该方法一般使用场景是把对象保存在需要计算哈希值的类中(如HashMap,Hashtable,HashSet)。

MyObject a = new MyObject(123);

MyObject b = new MyObject(123); 

a.equals(b);// 假设equals被重写为对123进行比较,返回true

Map<MyObject> mp = new hashMap<>();

mp.add(a);

mp.add(b);

System.out.println(a.hashCode(),b.hashCode());// hashCode()方法没被重写,这里a和b的哈希值不同

两个对象equals比较返回true,仍然可以同时存在hashMap中。

为了和equals方法保持一致--euqals返回true时,两个对象的hashcode方法返回值相同;两个对象的hashcode不同时,equals方法返回false。

则需要对hashCode()方法进行重写。如:

@override
public int hashCode(){  
    int hash =  property1.hashCode();
    return property1 ^ property2;
}

 

Java中equals方法和hashCode方法的关系

原文:https://www.cnblogs.com/bigyang/p/15177712.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!