重写hashcode和没有重写的区别

重写hashcode和没有重写的区别

1.public boolean equals(Object obj),和hashcode()方法是object对象中的方法。

1.public boolean equals(Object obj),和hashcode()方法是object对象中的方法。

  • 如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相同;
  • 如果两个对象的hashCode相同,它们并不一定相同(即用equals比较返回false)

(1)当obj1.equals(obj2)true时,obj1.hashCode() == obj2.hashCode()必须为true 
(2)当obj1.hashCode() == obj2.hashCode()false时,obj1.equals(obj2)必须为false

3为啥重写equals?

如果不重写equals,那么比较的将是对象的引用是否指向同一块内存地址,重写之后目的是为了比较两个对象的value值是否相等。
特别指出利用equals比较八大包装对象(如int,float等)和String类(因为该类已重写了equals和hashcode方法)对象时,
默认比较的是值,在比较其它自定义对象时都是比较的引用地址

4.什么是hashcode?

hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,
都是根据存储对象的hashcode值来进行判断是否相同的。
由于为了提高程序的效率才实现了hashcode方法,先进行hashcode的比较,如果不同,
那没就不必在进行equals的比较了,这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的,

其实简单的说就是为了保证同一个对象,保证在equals相同的情况下hashcode值必定相同,
如果重写了equals而未重写hashcode方法,可能就会出现两个没有关系的对象equals相同的 (因为equal都是根据对象的特征进行重写的),但hashcode确实相同的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simba1949

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值