equals,“==”,hashCode的区别

来源:互联网 发布:生态学现状知乎 编辑:程序博客网 时间:2024/06/05 06:37

1、“==”是运算符:比较变量对应的内存中所存储的数值是否相同。要比较两个基本数据类型数据或两个引用变量是否相等,只能使用“==”运算符。

       “==”比较两个引用类型变量,比较的是两个对象是否指向同一个对象,如果要看这两个变量所对应内存中的数值(内容)是否相等,则无法用“==”实现。

2、equals是Object类提供的方法之一,每个对象都具有equals这个方法,在没有覆盖equals(Object)方法的情况下,equals(Object)与“==”运算符一样,比较的是引用。

equals和“==”不同:equals(Object)可以被覆盖,可通过覆盖的方法让它不是比较引用,而是数据的内容。

3、hashCode()方法是从Object类中继承过来的,也是用来鉴定两个对象是否相等。Object类中的hashCode()方法返回对象在内存中地址转换成一个int值,所以如果没有重写hashCode()方法,任何对象的hashCode()都是不相等的。

equals和hashCode()的不同:

(1)equals()是给用户调用的,如果判断两个对象是否相等,可以重写equals()方法,然后在代码中调用。对于hashCode()方法一般不会去调用它,hashCode()相当于一个对象的编码。

(2)返回类型不同:hashCode()返回类型int型,equals()返回类型boolean型。

(3)一般在覆盖equals()方法的同时也要覆盖hashCode()方法。

(4)用这两种方法比较两个变量,equals()比较不相等,则hashCode()返回值可能相等,也有可能不等;

       反之,hashCode()返回值不等,一定能推出equals()比较也不相等;hashCode()返回值相等equals()比较可能相等,也有可能不相等。