hashcode和equals的使用
一、 说明
hashcode和equals都是用来判断对象是否相等的。
一般来讲equals是给代码编写者判断对象是否相等的,举个例子有个类只有名字属性,重写equals方法认为名字相等则对象相等,那么只要名字相同,对象便是相等的。
hashcode则一般是JDK来判断对象是否相等的,比如在set集合里面判断对象是否重复,就需要判断hashcode和equals是否都相等,只有都相等才认为重复,有一个不等则认为不重复。所以我们重写equals方法的同时一般也要重写hashcode让他们逻辑保持一致。
二、 代码分析
package hashcode;
public
class PeopleBean{
private
int id;
private String
name;
@Override
public
int hashCode() {
return
id;
}
@Override
public
boolean equals(Object obj) {
if (null == obj){
return
false;
}
if (this == obj){
return
true;
}
if (obj.getClass() !=
this.getClass()){
return
false;
}
PeopleBeanpeopleBean = (PeopleBean)obj;
return
name.equals(peopleBean.getName());
}
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 hashcode;
import java.util.HashSet;
import java.util.Set;
public
class HashCodeTest {
public
static void main(String[] args) {
PeopleBean bean1 = new PeopleBean();
bean1.setId(1);
bean1.setName("11");
PeopleBean bean2 = new PeopleBean();
bean2.setId(2);
bean2.setName("11");
System.out.println(bean1.equals(bean2));
Set<PeopleBean> set = new HashSet<PeopleBean>();
set.add(bean1);
set.add(bean2);
System.out.println(set);
bean2.setId(1);
Set<PeopleBean> set1 = new HashSet<PeopleBean>();
set1.add(bean1);
set1.add(bean2);
System.out.println(set1);
}
}
输出:true
[[email protected],[email protected]]
[[email protected]]