Object——equals方法,hashCode方法,toString方法
equals()
Object类中的equals方法用于检测一个对象是否等于另一个对象。
hashCode()
Object类中的hashCode()方法是由对象导出的一个整型数值(可以是负数)。每个对象都有一个散列码,其值为对象的存储地址。相同字符串的散列码相同。多个实例的散列码可以组合到一起使其更加均匀。
toString()
Object类中的toString()方法用于返回表示对象值的字符串。
Employee.java
package com.liang.equals_hashcode_toString;
import java.time.LocalDate;
import java.util.Objects;
/**
- @author Administrator
*/
public class Employee {
private String name;
private double salary;
private LocalDate hireDay;
public Employee(String name,double salary,int year,int month,int day) {
this.name=name;
this.salary=salary;
this.hireDay=LocalDate.of(year, month, day);
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public LocalDate getHireDay() {
return hireDay;
}
@Override
public int hashCode() {
return Objects.hash(name,salary,hireDay);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Employee other = (Employee) obj;
return Objects.equals(name, other.name)&&salary==other.salary&&Objects.equals(hireDay, other.hireDay);
}
@Override
public String toString() {
return getClass().getName()+"[name=" + name + ", salary=" + salary + ", hireDay=" + hireDay + "]";
}
}
Manager.java
/**
*
*/
package com.liang.equals_hashcode_toString;
import java.util.Objects;
/**
- @author Administrator
*/
public class Manager extends Employee {
private double bouns;
/**
* @param name
* @param salary
* @param year
* @param month
* @param day
*/
public Manager(String name, double salary, int year, int month, int day) {
super(name, salary, year, month, day);
bouns=0;
// TODO 自动生成的构造函数存根
}
public void setBouns(double bouns) {
this.bouns=bouns;
}
public double getSalary() {
return bouns+super.getSalary();
}
@Override
public int hashCode() {
return super.hashCode()+Objects.hash(bouns);
}
@Override
public boolean equals(Object obj) {
if(!super.equals(obj))
return false;
Manager other = (Manager) obj;
return bouns==other.bouns;
}
@Override
public String toString() {
return super.toString()+"[bouns="+bouns+"]";
}
}
Test.java
/**
*
*/
package com.liang.equals_hashcode_toString;
/**
- @author Administrator
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
Employee e1=new Employee("dabao",2000,2001,2,1);
Employee e2=e1;
Employee e3=new Employee("dabao",2000,2001,2,1);
Employee e4=new Employee("fdsaf",2300,2071,12,12);
System.out.println("e1==e2"+(e1==e2));
System.out.println("e1==e3"+(e1==e3));
System.out.println("e1.equals(e3)"+(e1.equals(e3)));
System.out.println("e1.equals(e4)"+(e1.equals(e4)));
System.out.println("e4.toString()"+e4.toString());
Manager m1=new Manager("boss",2000,1221,1,4);
Manager m2=new Manager("boss",2000,1221,1,4);
m1.setBouns(5000);
System.out.println("m1.equals(m2)"+(m1.equals(m2)));
System.out.println("m1.toString()"+m1.toString());
System.out.println("e1.hashCode()"+e1.hashCode());
System.out.println("e3.hashCode()"+e3.hashCode());
System.out.println("m1.hashCode()"+m1.hashCode());
System.out.println("m1.getSalary()"+m1.getSalary());
System.out.println("m2.getSalary()"+m2.getSalary());
}
}
运行结果
e1e2true
e1e3false
e1.equals(e3)true
e1.equals(e4)false
e4.toString()com.liang.equals_hashcode_toString.Employee[name=fdsaf, salary=2300.0, hireDay=2071-12-12]
m1.equals(m2)false
m1.toString()com.liang.equals_hashcode_toString.Manager[name=boss, salary=2000.0, hireDay=1221-01-04][bouns=5000.0]
e1.hashCode()680504979
e3.hashCode()680504979
m1.hashCode()-1045432081
m1.getSalary()7000.0
m2.getSalary()2000.0