先上结论:
重写equals不一定要重写hashcode,特列就是在没有使用容器(集合)时
一.java规定
1.根据equals方法和hashcode规定指出,两个相同的对象的hashcode必须相同
2.两个对象相等,对两个 equals() 方法返回 true
3.两个对象有相同的 hashcode 值,它们也不一定是相等的
4.hashCode() 的默认行为是对堆上的对象的‘地址值’使用算法得到的hashcode值。如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)。
二.举例说明
package day01;
import java.util.Objects;
public class Student {
private Long id;
public Student() {
}
public Student(Long id) {
this.id = id;
}
/**
* 获取
* @return id
*/
public Long getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(Long id) {
this.id = id;
}
public String toString() {
return "Student{id = " + id + "}";
}
@Override
public boolean equals(Object obj) {
if(obj!=null&&!(obj instanceof Student)){
return false;