最详细的equal和hashcode详解

java.lang.Object类中有两个非常重要的方法:

1.public boolean equals(Object obj)

2.public int hashCode()

Object类是类继承结构的基础,是每一个类的父类。所有的对象,包括数组,都实现了在Object类中定义的方法。

equals()方法详解

equals()方法是用来判断其他的对象是否和该对象相等.

  equals()方法在object类中定义如下:

public boolean equals(Object obj) {

 return (this == obj);

}

很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、Integer、Double等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法。

  比如在String类中如下:

public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n– != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}复制代码

对于Object类来说,equals()方法在对象上实现的是差别可能性最大的等价关系,即,对于任意非null的引用值xy,当且仅当xy引用的是同一个对象,该方法才会返回true

需要注意的是当equals()方法被override时,hashCode()也要被override。按照一般hashCode()方法的实现来说,相等的对象,它们的hash code一定相等。

 

Hashcode是字符串通过某种算法得到的一个整数,这个整数在一定的字符串之间会有可能计算出来是重复的,因为它是通过一种规则去计算的

 

转载:https://blog.csdn.net/zj15527620802/article/details/88547914

posted @ 2020-08-07 14:58  Monica_维维  阅读(227)  评论(0编辑  收藏  举报