为什么重写equals方法,为什么重写equals方法就要重写hashcode方法。(非常容易理解)

我们知道==判断的是,是不是同一个地址。可以说是判断是不是同一个。

重写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));

    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值