最详细的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
的引用值x
和y
,当且仅当x
和y
引用的是同一个对象,该方法才会返回true
。
需要注意的是当equals()
方法被override时,hashCode()
也要被override。按照一般hashCode()
方法的实现来说,相等的对象,它们的hash code一定相等。
Hashcode是字符串通过某种算法得到的一个整数,这个整数在一定的字符串之间会有可能计算出来是重复的,因为它是通过一种规则去计算的
转载:https://blog.csdn.net/zj15527620802/article/details/88547914