==和equals的区别以及hashcode的联系

文章探讨了Java中`==`与`equals`方法在基本数据类型和包装类中的不同比较方式,以及`equals`和`hashcode`在对象相等判断时的角色。`equals`通常用于比较内容,而`hashcode`用于快速筛查,但两者并不总是同步。当需要高效比较大量数据时,应先比较`hashcode`,再用`equals`确认。
摘要由CSDN通过智能技术生成

一、==与equals的区别

基本数据类型(byte、short、int、long、float、double、char、boolean):无论数据类型是什么(除boolean),==比较的都是数据值是否相等

包装类(Byte、Short、Integer、Long、Float、Double、Character、Boolean):==比较的就是数据的内存地址,包装类不同则会报错。而equals比较的是数据值是否相等,如果包装类不同,两个数据值相同,那么返回也是false

二、equals与hashcode的区别及联系

为什么需要在一个对象中重写equals和hashcode方法?

在Java中有两种判断对象相等的方法,一种是equals,一种是hashcode

equals:里面的东西较为全面较为复杂,效率低

hashcode:只需生成一个hash值进行比较,效率高

那为什么不直接用hashcode去进行比较?

因为hashcode不完全可靠,有时不同的对象他们的hashcode却相同(可能是生成hash值的公式有问题),只能说大部分是可靠的

所以得出:

equals相等hashcode一定相等,equals绝对可靠

hashcode相等equals不一定相等,hashcode不一定可靠

如果有大量数据需要快速去比较该怎么处理?

equals与hashcode同时使用

先比较对象的hashcode是否相等,如果相等再去用equals比较,equals如果相等,则表示两个对象一定相同;如果hashcode都不同,则表示两个对象一定不同

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值