规则:
注意点:
下图重写equals方法
重写equals、hashCode、toString(雇员经理例子)
Employee类
package com.cxf.EqualsHashCodeDemo;
import java.time.LocalDate;
import java.util.Objects;
public class Employee {
private String name;
private double salsry;
private LocalDate hireDay;
public Employee(String name,double salsry,int year,int month,int day){
this.name = name;
this.salsry = salsry;
hireDay = LocalDate.of(year,month,day);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalsry() {
return salsry;
}
public void setSalsry(double salsry) {
this.salsry = salsry;
}
public LocalDate getHireDay() {
return hireDay;
}
public void setHireDay(LocalDate hireDay) {
this.hireDay = hireDay;
}
public void raiseSalary(double byPercent){
double raise = salsry * byPercent / 100;
salsry += raise;
}
@Override
public boolean equals(Object otherObject) {
if (this == otherObject) return true;
if (otherObject == null || getClass() != otherObject.getClass()) return false;
Employee other = (Employee) otherObject;
return Objects.equals(name,other.name) && salsry == other.salsry
&& Objects.equals(hireDay,other.hireDay);
}
@Override
public int hashCode() {
return Objects.hash(name, salsry, hireDay);
}
@Override
public String toString() {
return getClass().getName() + "Employee{" +
"name='" + name + '\'' +
", salsry=" + salsry +
", hireDay=" + hireDay +
'}';
}
}
Manager类
package com.cxf.EqualsHashCodeDemo;
public class Manager extends Employee {
private double bonus;
public Manager(String name, double salsry, int year, int month, int day) {
super(name, salsry, year, month, day);
bonus = 0;
}
public double getSalary() {
double baseSalary = super.getSalsry();
return baseSalary + bonus;
}
public void setBonus(double bonus){
this.bonus = bonus;
}
@Override
public boolean equals(Object otherObject){
if (!super.equals(otherObject)) return false;
Manager other = (Manager) otherObject;
return bonus == other.bonus;
}
@Override
public int hashCode() {
return super.hashCode() + 17 * new Double(bonus).hashCode();
}
@Override
public String toString(){
return super.toString() + "[bonus=" + bonus + "]";
}
}
测试
package com.cxf.EqualsHashCodeDemo;
public class EqualsTest {
public static void main(String[] args) {
Employee emp1 = new Employee("Lucy",75000,1987,12,15);
Employee emp2 = emp1;
Employee emp3 = new Employee("Lucy",75000,1987,12,15);
Employee bob = new Employee("Bob",50000,1989,10,1);
System.out.println("emp1 == emp2: " + (emp1 == emp2));
System.out.println("emp1 == emp3: " + (emp1 == emp3));
System.out.println("emp1.equals(emp3): " + (emp1.equals(emp3)));
System.out.println("emp1.equals(bob): " + (emp1.equals(bob)));
System.out.println("bob.toString(): " + bob.toString());
Manager man1 = new Manager("Tom",80000,1987,12,15);
Manager boss = new Manager("Tom",80000,1987,12,15);
boss.setBonus(5000);
System.out.println("============================================================");
System.out.println("boss.toString(): " + boss);
System.out.println("man1.equals(boss): " + man1.equals(boss));
System.out.println("emp1.hashCode(): " + emp1.hashCode());
System.out.println("emp3.hashCode(): " + emp3.hashCode());
System.out.println("bob.hashCode(): " + bob.hashCode());
System.out.println("man1.hashCode(): " + man1.hashCode());
}
}