什么情况下需要重写呢?
比如去重操作时,
有时候往Set集合存放对象User,我们User类的字段太多时,比如有50个字段,
判断两个User对象相同,不需要判断它们所有字段都相同,只需要判断它们的某几个字段相同,就定为它们俩相同,
这时候需要重写Equals()方法,也要重写HashCode()方法,
public class User { private String name; private int age; private String passport; //getters and setters, constructor @Override public boolean equals(Object o) { if (o == this) return true; if (o ==null) return false; if (!(o instanceof User)) { return false; } User user = (User) o; return user.name.equals(name) && user.age == age && user.passport.equals(passport); } //这种17和31散列码的想法来自经典的Java书籍——《Effective Java》第九条 @Override public int hashCode() { int result = 17; result = 31 * result + name.hashCode(); result = 31 * result + age; result = 31 * result + passport.hashCode(); return result; } }
在Equals()方法和HashCode()方法中,
判断哪几个字段重复,就定为对象相同