ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

作业三 重写equals()和hashCode()方法

2021-06-14 19:57:39  阅读:164  来源: 互联网

标签:obj equals hashCode result Student 重写


重写equals()方法和hashCode()方法
1、为什么重写equals()方法
Object类中的equals方法和“==”是一样的,没有区别,即俩个对象的比较是比较他们的栈内存中存储的内存地址。而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,他们比较的是值是不是相等。所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法。
2、为什么重写hashCode()方法
hashset在存储对象时,先判断两个对象的hash值是否一样,只有在hashcode()相等的前提下equals()也相等,才认为两个对象时同一个。
3、举例子
假设需要记录学生的成绩,每个学生本身有姓名,年龄,性别几个属性,把姓名、性别、年龄都一样的当成是同一个人(虽然不严谨)。学生对象自然就是key,成绩是Value
代码:

class Student {
    String name;
    int age;
    //true表示男,false表示女
    boolean sex;


    @Override
    public int hashCode() {
        int result = 17;
        result = 37*result+name.hashCode();
        result = 37*result+age;
        result = 37*result+(sex ? 0 : 1);
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        return obj instanceof Student &&
                this.name.equals(((Student)obj).name) &&
                this.age ==  ((Student)obj).age &&
                this.sex == ((Student)obj).sex;
    }
}

标签:obj,equals,hashCode,result,Student,重写
来源: https://blog.csdn.net/weixin_46249197/article/details/117911812

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有