equals
方法为所有类父类Object
类的方法,用于判断两个对象是否相等,在子类不重写equals
方法的情况下,与==
逻辑一致。重写equals
,一般逻辑为判断两个对象的内容是否一致,也可以只判断对象的某几个属性。注:字符串String类的equals方法重写了,方法逻辑为比较字符串对象的值
。
重写equals
,一般逻辑为判断两个对象的内容是否一致。
hashCode()
的默认行为是对堆上的对象产生独特值。如果没有重写hashCode()
,则该class
的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)。
除了自定义的判断条件生效外,判断两个对象是否一致的实例是在使用集合类时,集合类中的对象的判断与equals的判断一致。
以HashMap存储对象为例:
// HashMap get方法源码
public V get(Object key) {
Node<K,V> e;
return (e = getNode(hash(key), key)) == null ? null : e.value;
}
这里hash(key)
中主要是获取key
的hashCode
做运算,其他集合使用都是类似,所以在集合中判断对象是否相等时不是使用equals
判断的,而是使用对象的hashCode
值判断的,所以对象在重写equals
时也必须重写hashCode
方法,并且hashCode
方法还必须和equals
方法中的判断逻辑一致。
网友评论