Java中的equals方法与散列码hashCode

下面是一个示例,自定义equals方法,和比较hashcode


Employee类:

package equals;

import java.time.*;
import java.util.Objects;
public class Employee {
    private String name;
    private double salary;
    private LocalDate hireday;

    public Employee(String aname,double asalary,int year,int month,int day){
        this.name=aname;
        this.salary=asalary;
        hireday=LocalDate.of(year,month,day);
    }

    public String getName(){return name;}

    public double getSalary(){return salary;}

    public LocalDate getHireday(){return hireday;}

    public void raiseSalary(double byPercent){
        double raise=salary*byPercent/100;
        salary+=raise;
    }

    public boolean equals(Object otherObject){
        if(this==otherObject) return true;//identical
        if(otherObject==null) return false;
        if(getClass()!=otherObject.getClass()) return false;//classes
        Employee other=(Employee)otherObject;
        return Objects.equals(name,other.name) && salary==other.salary && Objects.equals(hireday,other.hireday);
    }

    public int hashCode(){return Objects.hash(name,salary,hireday);}

    public String toString(){return getClass().getName()+"[name="+name+",salary="
    +salary+",hireday"+hireday+"]" ;}
}
 

Manager类

package equals;

public class Manager extends Employee {
    private double bonus;

    public Manager(String aname,double asalary,int year,int month,int day){
        super(aname,asalary,year,month,day);
        bonus=0;
    }

    public double getSalary(){
        double baseSalary=super.getSalary();
        return baseSalary+bonus;
    }

    public void setBonus(double bonus){this.bonus=bonus;}

    public boolean equals(Object otherObject){
        if(!super.equals(otherObject)) return false;
        Manager other=(Manager)otherObject;
        return bonus==other.bonus;
    }

    public int hashCode(){
        return super.hashCode()+17*new Double(bonus).hashCode();
    }

    public String toStirng(){return super.toString()+"[bonus="+bonus+"]";}
}
 

test:

package equals;

public class EqualTest {
    public static void main(String[]args){
        Employee alice_1=new Employee("Alice Adam",75000,19877,12,15);
        Employee alice_2=alice_1;
        Employee alice_3=new Employee("Alice Adams",75000,1987,12,15);
        Employee bob=new Employee("Bob Brandson",50000,1989,10,1);

        System.out.println("Alice_1==Alice_2:"+(alice_1==alice_2));

        System.out.println("alice_1==alice_3"+(alice_1==alice_3));

        System.out.println("alice_1.equals(alice_3)"+alice_1.equals(alice_3));

        System.out.println("bob.toString():"+bob);

        Manager carl=new Manager("Carl Cracker",8000,1987,12,15);
        Manager boss=new Manager("Carl Cracker",80000,1987,12,15);
        boss.setBonus(5000);
        System.out.println("boss.toString():"+boss);
        System.out.println("carl.equals(boss):"+carl.equals(boss));
        System.out.println("alice_1.hashcode():"+alice_1.hashCode());
        System.out.println("alice_3.hashcode():"+alice_3.hashCode());
        System.out.println("bob.hashcode():"+bob.hashCode());
        System.out.println("carl.hashcode():"+carl.hashCode());
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值