toString() 方法 、hashCode() 方法、equals() 方法

一、Object 类介绍:

Object 类是所有类的终极父类,任何一个类都继承了 Object 类(包括自定义的类),接口不能继承Object,只有一个无参的构造。常用方法:toString()、hashCode()

二、toString() 方法:

返回对象的描述信息:全类名@哈希码值的十六进制形式

编程规范:开发者要对自定义的类重写toString(),对对象做详细的说明

toString()方法示例:

在这里插入图片描述
在这里插入图片描述

三、hashCode() 方法:

返回该对象的哈希码值,int类型;
同一个对象的哈希码值是唯一的。java规定如果两个对象equals返回true,那么这两个对象的hashCode码必须一致。

编程规范: 一般重写了类的equals方法后,都会重写它的hashCode方法

hashCode()方法示例:

在这里插入图片描述
在这里插入图片描述

四、toString和hashCode返回的哈希码的联系

根据上面的示例,我们看看“1b6d3586”与“460141958”有什么关系?
在这里插入图片描述
在这里插入图片描述
他们之间是十六进制与十进制之间的关系!

五、equals() 方法:

默认比较的是两个对象的内存值,相等返回 true,否则 false。可重写equals方法。
问题:既然equals比较的是对象的内存值,那我们在开发的时候经常使用 equals() 方法比较两个字符串是否相等,为什么?
答案: String 重写了Object类的equals方法,比较的是字符串内容是否相等。

拓展:

equals 和 ==

==:

  • 比较基本数据类型,比较的是值是否相等。
  • 比较引用数据类型,比较的是地址是否相等。

equals:

  • 比较的是两个对象的地址值是否相等,此时等价 ==。
  • 重写后按照重写后的方式比较。

equals 和 hashCode 方法:

作用: 都是用于比较java对象是否一致。

  • equals:重写的equal() 方法里一般比较全面、复杂,效率低。
  • hashCode:生成一个int类型的hash值。效率高,但hash值可能不唯一。

问题: 由于hash值的生成问题,可能导致不同的对象,hash值相同。

结论:

  • equal()对比绝对可靠(equal()相等的两个对象他们的hashCode()肯定相等)
  • hashCode()不是绝对可靠的(hashCode()相等的两个对象他们的equal()不一定相等)

使用:
所有对于需要大量并且快速的对比的话如果都用equal()去做显然效率太低,所以每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!


作者:cp026la
原文:https://blog.csdn.net/cp026la/article/details/88381029

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值