我们知道==判断的是,是不是同一个地址。可以说是判断是不是同一个。
重写equals方法,是我们创建几个不同的对象,看看他们的属性值(自己规定哪些值)是不是一样。
当重写后equals会返回true。但是为什么还要重写hashCode呢。
当我们把对象放入HashSet集合中,发现,HashSet在加入时会根据hash值添加。hash值不同的话
会被当成不同对象,然后加入,就不能去重了。
当我们重写了hashcode方法后,这两个对象在加入hashset中就只能加一个了。
这里补充 hashcode 不等于 hash值 不等于地址。
下面的equals为默认object的。
所以hashcode相等,equals不一定相等。hashcode不等,equals一定不相等。
equals相等,hashcode一定相等。equals不相等,hashcode不一定相等。
public class Person{
private String nameString;
private int age;
public Person(String nameString,int age) {
this.age = age;
this.nameString = nameString;
}
@Override
public String toString() {
return "Person [nameString=" + nameString + ", age=" + age + "]";
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(nameString, person.nameString);
}
// @Override
// public int hashCode() {
// return Objects.hash(nameString);
// }
public static void main(String[] args) {
Person person = new Person("张三",18);
Person person1 = new Person("张三",18);
System.out.println(person.equals(person1));
}
}