hashcode 和 equals 方法是用来鉴定2个对象是否相等。
一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用 ,就可以判断他们是否相等了。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。 举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2个对象是相等的。
如下:
package utils;
public class Student {
private int id;
private String name;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (id != other.id)
return false;
return true;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试类
package utils;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<Student,String> map = new HashMap<Student,String>();
Student e = new Student();
e.setId(1);
e.setName("lol");
Student e1 = new Student();
e1.setId(1);
e1.setName("lol");
//商业逻辑是对象中值相等就相等,所以我们需要重写它的 hashCode方法
map.put(e, "1421801Z");
map.put(e1, "1421801Z");
System.out.println(map.toString());
}
}
结果:
没有重写HashCode 和 equals 方法
重写HashCode 和 equals 方法
总结分析:
HashCode 方法是根据实体类中某些属性来重写的,上面的id 就是学生的学号(主键)。
equals 方法的比较类型如上。
HashCode 和 equals 方法是map、set容器用来解决重复值得一个工具,当map、set在添加东西进去的时候,首先它会
调用HashCode 方法,由于每个对象都有唯一的Hash码所以是不同的,但是我们可以通过重写HashCode 来达到当“值”相等的情况下,默认相等。
然后再去调用equals 方法判断两者是否相等。