1. 首页
  2. 编程面试题
  3. Java
  4. Java基础

两个对象equals值相同,可以有不同的hashcode吗?



不可以

首先,两个对象相等,则地址一定相等,从源码即可看到,equals比较的是地址值

public boolean equals(Object obj) {
    return (this == obj);
}

如果两个对象x和y满足 x.equals(y) true,说明内存地址一样,内存地址一样,则调用hashCode()得出的hashcode值肯定也是一样的

public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

总结:

1、如果两个对象相同(equals方法返回true),那么它们的 hashCode 值一定要相同;

2、如果两个对象的 hashCode 相同,它们并不一定相同。

精品推荐


GPT-4 Plus账号大大大降价了!
免费AI写作工具!

发布者:admin,如若转载,请注明出处:https://ai1024.vip/42930.html

QR code
//