复写equals、hashCode和toString方法
equals、hashCode和toString 这三个方法都是object类的方法,由于所有的类都是继承这个类,所以每一个类都有这三个方法。
1.复写equals方法
原则:
- 首先,两个实例是相同的对象, 可以通过运算符instanceof来判断,注意instanceof是运算符而不是方法;也可以通过方法getClass() != o.getClass()来判断。
- 其次,两个实例的成员变量是相同的。
例子:
public class User { String name; int age; @Override public boolean equals(Object o) { //如果这个两个实例是相同的,那么两个实例指向同一块堆空间,所以一定是相同的 if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; if (age != user.age) return false; return name.equals(user.name); } }
2.复写hashCode方法
原则:
- 如果两个实例通过equals方法判断是相同的,那么两个实例通过hashCode方法返回的结果也必须是相同的。
例子:
public class User { String name; int age; @Override public int hashCode() { int result = name.hashCode(); result = 31 * result + age; return result; } }
3.复写toString方法
如果没有复写这个方法,那么默认的就会打印出这个实例的类名和其对应的hash值
例子:
public class User { String name; int age; @Override public String toString() { return "User{" + "age=" + age + ", name='" + name + '\'' + '}'; } }