您的位置:首页 > 编程语言 > Java开发

java重写equals和hashCode方法

2017-01-19 00:42 405 查看
要点

重写equals一定要重写hashCode 两个对象相等hashCode一定相等 hashCode相等对象不一定相等

代码示例

//要点 两个对象相等则他们的hashCode一定想等     hashCode相等 两个对象不一定相等
public class Employee {    //重写equals和hashCode方法

private String name;
private int age;

public Employee() {}

public Employee(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public int hashCode() {
return Objects.hash(name,age);     //采用Objects默认的算法去计算Employeee的hash码
}

//补充说明下Objects的equals方法  等价于将比较两个对象的值是不是相等
@Override
public boolean equals(Object obj) {
if(obj == this)return true;    //如果他们两个在内存中的地址一样那么他们肯定是同一个对象

if(obj == null) return false;    //null和任何对象都不相等   放在第一个过滤条件
if(obj.getClass() != getClass()) return false;  //如果两个对象不是采用同一个类模板生成的  那么他们一定不会相等

//通过了上面的校验证明obj是可以强转为Employee的
Employee ee = (Employee)obj;
return Objects.equals(name, ee.getName()) && Objects.equals(age, ee.getAge());
}

@Override
public String toString() {
return "name : " + name + " age : " + age;
}
}


测试类

public class TestEmployee {
public static void main(String[] args) {
Employee ee = new Employee("张三",19);
Employee ee2 = new Employee("张三",19);

Employee ee3 = new Employee("李四",19);
Employee ee4 = new Employee("张三",20);

System.out.print("ee.euals(ee) = " + ee.equals(ee) + "\t");

System.out.println();
System.out.print("ee.equals(ee2) = " + ee.equals(ee2) + "\t");
System.out.print("ee.hashCode = " + ee.hashCode()+"\t");
System.out.print("ee2.hashCode = " + ee2.hashCode()+"\t");

System.out.println();
System.out.print("ee.equals(ee3) = " + ee.equals(ee3) + "\t");
System.out.print("ee.hashCode = " + ee.hashCode()+"\t");
System.out.print("ee3.hashCode = " + ee3.hashCode()+"\t");

System.out.println();
System.out.print("ee.equals(ee4) = " + ee.equals(ee4) + "\t");
System.out.print("ee.hashCode = " + ee.hashCode()+"\t");
System.out.print("ee4.hashCode = " + ee4.hashCode()+"\t");
}
}


结果

ee.euals(ee) = true
ee.equals(ee2) = true   ee.hashCode = 24022539  ee2.hashCode = 24022539
ee.equals(ee3) = false  ee.hashCode = 24022539  ee3.hashCode = 26104871
ee.equals(ee4) = false  ee
4000
.hashCode = 24022539  ee4.hashCode = 24022540
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hashCode equals