问题一、java中==和equals和hashCode的区别

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()的区别

你可能感兴趣的:(面试,android,java)