java中hashCode一样,2个对象相等吗 - 面试宝典

举报
皮牙子抓饭 发表于 2023/08/12 09:49:38 2023/08/12
【摘要】 在Java中,hashCode是用来计算对象的哈希码的方法,它是一个整型值。当两个对象的hashCode值相等时,并不意味着这两个对象一定相等。hashCode的相等只是作为判断两个对象是否相等的一种快速检查手段,它可以减少比较的次数。 在Java中,equals方法是用来判断两个对象是否相等的。当两个对象的hashCode值相等,并且equals方法返回true时,才可以认为这两个对象是相...

在Java中,hashCode是用来计算对象的哈希码的方法,它是一个整型值。当两个对象的hashCode值相等时,并不意味着这两个对象一定相等。hashCode的相等只是作为判断两个对象是否相等的一种快速检查手段,它可以减少比较的次数。 在Java中,equals方法是用来判断两个对象是否相等的。当两个对象的hashCode值相等,并且equals方法返回true时,才可以认为这两个对象是相等的。 但是,当两个对象的hashCode值相等时,equals方法返回false,并不代表这两个对象不相等。因为hashCode的计算是基于对象的属性的,有可能不同的对象具有相同的hashCode值,这种情况被称为哈希冲突。 综上所述,hashCode一样并不代表两个对象相等,只是作为判断对象是否相等的一种快速检查手段。最终的相等判断还是要通过equals方法来进行。

下面是一个示例代码:

javaCopy codepublic class Person {
    private String name;
    private int age;
    // 构造方法和其他方法省略
    @Override
    public int hashCode() {
        int result = 17;
        result = 31 * result + name.hashCode();
        result = 31 * result + age;
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Person other = (Person) obj;
        return name.equals(other.name) && age == other.age;
    }
}

在这个示例中,我们重写了hashCode方法和equals方法。hashCode方法根据对象的name和age属性计算哈希码,equals方法比较两个对象的name和age属性是否相等。 当我们使用HashSet等集合类时,可以通过重写hashCode和equals方法来确保集合中不会有重复的对象。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。