美文网首页
hashcode和equals方法

hashcode和equals方法

作者: lenny611 | 来源:发表于2019-08-13 22:42 被阅读0次

对于两个对象,Java要求如下:
equals()相等,hashcode()一定相等;
quals()不等,hashcode()可能相等,也可能不等;
hashcode()不等,一定能推出equals()也不等;
hashcode()相等,equals()可能相等,也可能不等。

而根据Java规范的约定,在集合类中需要重写这两个方法,
因为在集合中,判断两个对象是否相等的规则是:
第一步,如果hashCode()相等,则查看第二步,否则不相等;
第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等。

Java语言对equals()的要求如下,这些要求是必须遵循的:
A 对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。
B 反射性:x.equals(x)必须返回是“true”。
C 类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
D 一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。
任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。

可能看上面看得一脸懵逼,答主直接说说自己的见解吧。
hashcode和equals方法都来自Object类,
简单来说,hashcode方法重写就是为了保证相同的对象会有相同的hashcode,
而根据上面的规则,改写hashcode,就必然要写equals。
因为Object的equal方法默认是两个对象的引用的比较,意思就是指向同一内存,地址则相等,否则不相等;
而如果需要用到自定义的类,就必然要写关于这个类的对象是否相等的equals方法。

相关文章

网友评论

      本文标题:hashcode和equals方法

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