hashCode()和equals()的区别和联系

以你之姓@ 2023-07-06 08:44 51阅读 0赞

在Java中任何一个对象都继承Object类,所以都具备hashCode()方法和equals(Object obj)方法。

equals(Object obj)方法是用来判断两个对象是否相同,相同就返回true,不相同就返回false。
hashCode()方法返回一个int数值。
JDK对hashCode()方法和equals()方法有一定的规范:

若重写equals(Object obj)方法,有必要重写hashcode()方法,确保通过equals(Object obj)方法判断结果为true的两个对象具备相等的hashcode()返回值。说得简单点就是:“如果两个对象相同,那么他们的hashcode应该 相等”。如果你非要写一个类让equals(Object obj)返回true而hashcode()返回两个不相等的值,编译和运行都是不会报错的。
如果equals(Object obj)返回false,即两个对象“不相同”,并不要求对这两个对象调用hashcode()方法得到两个不相同的数。说的简单点就是:“如果两个对象不相同,他们的hashcode可能相同”。
根据这两个规范,可以得到如下推论:
1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。
2、如果两个对象不equals,他们的hashcode有可能相等。
3、如果两个对象hashcode相等,他们不一定equals。
4、如果两个对象hashcode不相等,他们一定不equals。
所以解决方式是,每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!

发表评论

表情:
评论列表 (有 0 条评论,51人围观)

还没有评论,来说两句吧...

相关阅读

    相关 equals()hashCode()区别

    equals():表达的是对象或变量具体的值,即两个对象包含的值,可能是对象引用,也可能是值类型 hashCode():计算出对象实际的哈希值,并返回哈希码,又称作散列值,每

    相关 ==equals区别联系

      > 1)对于==,比较的是值是否相等 > > 如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等; > > 如果作用于引用类型的变量,则比较的是所指向的