equals()与hashCode()若干问题
1
==
==
的作用是判断两个对象的地址是不是相等。即,判断两个对象是不试同一个对象。
equals()
equals() 的作用是 用来判断两个对象是否相等。
equals()方法存在于Object类中,Object类是所有类的父类。
public boolean equals(Object obj) {
return (this == obj);
}
通过类是否覆盖equals()方法,将它分为2类:
- 若某个类没有覆盖equals()方法,当它的通过equals()比较两个对象时,实际上是比较两个对象是不是同一个对象。这时,等价于通过“==”去比较这两个对象。
- 我们可以覆盖类的equals()方法,来让equals()通过其它方式比较两个对象是否相等。通常的做法是:若两个对象的内容相等,则equals()方法返回true;否则,返回fasle。
2
hashCode()
hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。
hashCode()函数存在于Object类中,Object类是所有类的父类。
public native int hashCode();
hashCode() 在散列表中才有用,在其它情况下没用。
在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。