Object的equals方法

 java.lang.Object

  java.lang包在使用的时候无需显示导入,编译时由编译器自动导入。

  Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类。

  Object类是Java中唯一没有父类的类。

  其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法。

这里写图片描述

相等测试与自检性
这里写图片描述

hashcode
这里写图片描述

toString
这里写图片描述

public class Employee {

    private String name;
    private double salary;
    private Date hireDay;

    public Employee(String n, double s, int year, int month, int day ){
        name = n;
        salary = s;
        GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
        hireDay = calendar.getTime();
    }

    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }

    public Date getHireDay() {
        return hireDay;
    }

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

    @Override
    public boolean equals(Object otherObj) {

        if(otherObj == null) return false;

        if(this == otherObj) return true;

        if(getClass()!=otherObj.getClass()) return false;

        Employee other = (Employee) otherObj;

        return Objects.equals(name, other.name) 
                && salary == other.salary 
                && Objects.equals(hireDay, other.hireDay);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, salary, hireDay);
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return getClass().getName() + "[name=" + name + ",salary=" + salary 
                + ",hireDay=" + hireDay + "]";
    }

}


public class Manager extends Employee{

    private double bonus;

    public Manager(String n, double s, int year, int month, int day) {
        super(n, s, year, month, day);

    }

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

    public void setBonus(double b) {
        bonus = b;
    }

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

    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return super.hashCode() + 17 * new Double(bonus).hashCode();
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return super.toString() + "[bonus=" + bonus + "]";
    }
}


public class Test {

    public static void main(String[] args) {

         int i = Objects.hashCode(new Date());//1405888641 
         int ii = Objects.hash(new Date());//1405888672

         Employee e1 = new Employee("周杰伦", 75000, 1987, 12, 15);
         Employee e2 = new Employee("周杰伦", 75000, 1987, 12, 15);
         Employee e3 = new Employee("张学友", 50000, 1989, 10, 1);
         System.out.println(e1.equals(e2)); //true
         System.out.println(e2.equals(e1)); //true
         System.out.println(e1.equals(e3)); //false

         Manager m1 = new Manager("周杰伦", 75000, 1987, 12, 15);
         Manager m2 = new Manager("李沁", 50000, 1999, 10, 1);
         System.out.println(m1.equals(e1)); //false
         System.out.println(m1.equals(m2)); //true

         Employee ee1 = new Manager("周杰伦", 75000, 1987, 12, 15) ;
         System.out.println(ee1.equals(e1)); //fasle
         System.out.println(ee1.equals(m1)); //true

         Manager m3 = (Manager) ee1;
         System.out.println(m3.equals(e1)); //false
         System.out.println(m3.equals(m1)); //true

         m3.setBonus(2000);
         System.out.println(m3.equals(m1)); //false
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39981500/article/details/78800578