1、“==”
==是运算符,用来比较两个值、两个对象的内存地址是否相等。
2、“equals()”:
equals是Object类的方法,默认情况下比较两个对象是否是同一个对象,内部实现是通过“==”来实现的。
如果想比较两个对象的其他内容,则可以通过重写equals方法,例如:String类就重写了equals方法,改成了对象的内容是否相等。
3、“hashCode()”:
hashCoed也是Object类里面的方法,返回值是一个对象的哈希码,同一个对象哈希码一定相等,但不同对象哈希码也有可能相等。哈希码主要有以下几个注意点:
(1)HashCode的存在主要是为了查找的快捷性,HashCode是用来在散列存储结构中确定对象的存储地址的
(2)如果两个对象equals相等,那么这两个对象的HashCode一定也相同
(3)如果对象的equals方法被重写,那么对象的HashCode方法也尽量重写
(4)如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置,如果两个对象的HashCode不相同,那么两个对象一定不相同。
以上(2)(4)加粗部分有点绕,可以这样比喻:
HashCode:就是对象的家庭地址;
equals方法:对比对象的身份证号、身高、体重等信息是否相等;
判断相等的时候,会先去根据HashCode去找,如果不一样肯定不一个对象,因为家都不一样。
如果家一样也不一定是相同的对象,因为一个家里住着好几口人,这时在用equals对比人的身份证号、身高、体重等信息,如果一样,那就同一个对象。这时看上面,细品。
第(3)条的意思:由于如果两个对象的HashCode不相同,那么两个对象一定不相同,所以在比较的时候,为了提高程序的比较效率,先进行hashcode的比较,如果不同,那没就不必在进行equals的比较了,这样就大大减少了equals比较的次数,这需要比较的数量很大的效率提高是很明显的。
如下是整理该知识点参考的博客,写的非常详细:
讲讲HashCode的作用
Java面试题之Java中==和equals()和hashCode()的区别