一.Object类中的hashCode方法
- 散列码是由对象导出的一个整数值。散列码是没有规律的。如果x和y是两个不同的对象,x.hashCode()与y.hashCode()基本上不会相同。
- 由于hashCode方法定义在Object类中,因此每个对象都有一个默认的散列码,其值为对象的存储地址。
- 如果重新定义equals方法,就必须重新定义hashCode方法(为了保证拥有相同数据域的对象有相同的哈希码),以便用户可以将对象插入到散列表中。
- 因为String类重写了equals与hashCode方法,所以可以使用
String str1="123";
String str2="123";
//print true
System.out.println(str1.equals(str2));
二.重写的方法
public class Employee
{
private String name;
private double salary;
private LocalDate hireDay;
public int hashCode()
{
return Objects.hash(name, salary, hireDay);
}
}
- 还可以使用IDE快捷生成代码,如使用IDEA的Alt+Ins,然后选中equals() and hashCode()便可自动生成。Java源码中建议自定义类都要重写此方法。