美文网首页
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