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
e1
e3false
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

其详细用法请参考《Java核心技术一》

猜你喜欢

转载自blog.csdn.net/weixin_43319635/article/details/88915265