eclipse为了方便我们编码,有这么一个功能,自动生成的重载hashCode()和equals(),附上一个小例子
public class Person {
String name;
int age;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) //调用对象和传入对象为同一对象
return true;
if (obj == null) //传入对象为null
return false;
if (getClass() != obj.getClass()) //判断两个对象对应字节码文件是否是同一个字节码文件,方便后面的向下转型,不至于出现类型转换异常
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
这里的final int prime = 31为何要选这个值呢,有以下几个原因:
1.首先31是个质数,只能被1和本身整除的数,乘上后不容易出现重复
2.其次31这个数不大也不小,不至于超出返回类型的int,也不容易在乘上后重复
3.最后就是31=32-1=2^5 -1,计算方便,向左移动5位,再减一就行了