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

重写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;
    }
}
上一篇:对象识别之重写对象equals


下一篇:2021-06-13