下面是一个示例,自定义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()); } }