【JAVA知识】==、hashcode 与 equals()区别?

时间:2021-04-12 16:05:56

1)==:是用来比较两个变量(基本类型和对象类型)的值是否相等。
如果是基本类型,那么直接比较值;如果是对象类型,那么比较的是这两个对象在栈中的引用。对象是放在堆中,引用是放在栈中。如果要比较堆中对象的内容是否相等,需要重写equals方法。
2)hashcode:返回对象在内存中地址转换成的一个int值,如果没有重写hashcode的话,那么任何对象的hashcode是不相等的,通常在集合类中需要hashcode和equals方法。
3)equals:该方法中就是用“==”来比较的,所以如果没有重写equals的话,equals是与==等价的。
4)hashcode的详解:
a、集合(Collection)有两种,一种List,有序的可重复,另一种是Set,无序不可重复。
b、Set中的元素无序不重复那么比较方式是什么呢?用Object.equals()去比较,但是不是插入的新元素跟所有老的元素进行遍历比较,而是采用哈希算法,
c、哈希算法是散列算法,是将数据依特定的算法直接指定到一个地址上。简单理解是hashcode返回的就是一个地址值。
d、当要插入新数据的,先调用这个元素的hashcode方法,定位到物理位置,如果该位置没有元素,那么它就储存在这个位置上。如果该位置上有元素,那么调用equals进行比较,相同则不存,不相同就储存起来。解决冲突而使用的equals的次数大大减少。
e、Java对于equals方法和hashcode方法是这样规定的:
i、如果两个对象相同,那么他们的hashcode值一定相同。
ii、如果两个对象hashcode相同,那么他们不一定相同,对象可以用equals比较。