美文网首页
26 equals与hashcode

26 equals与hashcode

作者: 张力的程序园 | 来源:发表于2020-05-04 10:52 被阅读0次

问题

equals和hashcode的作用是什么

答案

equals 方法在非空对象引用上实现相等关系判断,它具有自反、对称、传递、一致性,这其实也是数学上相等的定义。

#摘自JDK帮助文档
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。 
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。 
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。 
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。 
对于任何非空引用值 x,x.equals(null) 都应返回 false。 

hashCode返回该对象的哈希码值,它具有以下特性:

#摘自JDK帮助文档
在 Java 应用程序执行期间,在对同一对象多次调用hashCode方法时,必须一致地返回相同的整数,前提是将对象进行 equals比较时所用的信息没有被修改。
如果根据 equals方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode方法都必须生成相同的整数结果。
如果根据equals方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不要求一定生成不同的整数结果,但为不相等的对象生成不同整数结果可以提高哈希表的性能。

综上,Object类中的equals方法和"=="是一样的,即俩个对象的比较是它们的栈内存中存储的内存地址;但是对于String类,Integer类等一些类,是重写了equals和hashCode方法,才使得equals和"=="不同,他们比较的是值是不是相等。所以,当自己创建类时,要想实现基于不同的等于比较,必须重写equals和hashCode方法。

相关文章

网友评论

      本文标题:26 equals与hashcode

      本文链接:https://www.haomeiwen.com/subject/tydxuhtx.html