Java 的 euqals()
和 hashCode()
可以说是最常用的两个 Object 方法,那具体怎么重写这两个方法才能做到真正的实用和有效呢?
其实大致思路都是相同的,不过是判断地址和转型后判断属性,但转型和判断属性的方式还要考虑到子类继承的情况,下面是阅读《Java 修炼指南》后的总结写法
首先贴一下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| import java.util.Objects;
public class Person { int id; String name;
@Override public boolean equals(Object obj) { if (this == obj) { return true; }
if (obj == null) { return false; }
if (this.getClass() != obj.getClass()) { return false; }
Person person = (Person) obj;
return this.id == person.id && Objects.equals(this.name, person.name); }
@Override public int hashCode() { return Objects.hashCode(this); } }
|
其实大部分的使用都是相同的,只是在判断类型时有些不同,这里主要是考虑到类继承后重写父类(自定义)的 euqals()
方法,导致判断方式各异的情况,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| public class Person { int id; String name; ... }
public class Man extends Person { }
public class Women extends Person { String favor;
@Override public boolean equals(Object obj) { if (this == obj) { return true; }
if (this.getClass() != obj.getClass()) { return false; }
Women women = (Women) obj;
return this.id == women.id && this.name.equals(women.name) && this.favor.equals(women.favor); } }
|