复写equals、hashCode和toString方法

时间:2023-03-08 23:25:31
复写equals、hashCode和toString方法

equals、hashCode和toString 这三个方法都是object类的方法,由于所有的类都是继承这个类,所以每一个类都有这三个方法。

1.复写equals方法

原则:

  1. 首先,两个实例是相同的对象, 可以通过运算符instanceof来判断,注意instanceof是运算符而不是方法;也可以通过方法getClass() != o.getClass()来判断。
  2. 其次,两个实例的成员变量是相同的。

例子:

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方法

原则:

  1. 如果两个实例通过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 + '\'' +
'}';
}
}