重写了equals,请重写hashcode步骤
package web;
/**
* 在每个重写了equals方法的类中,你必须也要重写hashCode方法。如果不这样做的话,
* 就会违反Object.hashCode的通用约定,
* 从而导致该类无法与所有基于散列值(hash)的集合类结合在一起正常运行。
* hashCode()的返回值和equals()的关系如下:
如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。
如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等
* hashCode()返回该对象的哈希码值,该值通常是一个由该对象的内部地址转换而来的整数,
* 它的实现主要是为了提高哈希表(例如java.util.Hashtable提供的哈希表)的性能。
*
* @author zengst
*
*/
public class HashCodeEquals {
public static void main(String args[]) {
Student s1 = new Student("张三", 21);
Student s2 = new Student("张三", 21);
String aa="ddd",bb="ddd";
int aah = aa.hashCode();
int bbh = bb.hashCode();
System.out.println(aah+"\r\n"+bbh);
if (s1.equals(s2)) {
System.out.println("s1的代码:" + s1.hashCode() + " s2的代码:"
+ s2.hashCode());
} else {
System.out.println("不相同");
}
}
}
class Student {
private int age;
private String name;
public Student() {
}
public Student(String name, int age) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int hashCode() {
return (this.name.hashCode() + this.age) * 31;
}
public boolean equals(Object obj) {
boolean result = false;
if (obj == null) {
result = false;
}
if (this == obj) {
result = true;
}
if (obj instanceof Student) {
Student stu = (Student) obj;
if (stu.getName().equals(this.name) && stu.getAge() == (this.age)) {
result = true;
}
} else {
result = false;
}
return result;
}
}