“==” “equals()” “hashCode()”

简介

==

对于基本数据类型 byte、short、char、int、long、float、double,boolean,== 比较的是它们的值;而对于引用类型,如:类、接口、数组等,== 比较的是他们在内存中的存放地址。

equals()

默认情况下,equals 方法是调用 Object 类的 equals 方法,Object 的 equals 方法是用于判断对象的内存地址引用是不是同一个(是不是同一个对象);当然有一些类重写了 equals 方法,只进行内容的比较,如 String 类。

hashCode()

hashCode 方法采用哈希算法(哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上),返回的就是一个 hash 码,用途是在对对象进行散列的时候作为 key 输入,因此我们需要每个对象的 hash 码尽可能不同,这样才能保证散列的存取性能。

总结

  • equals 相等的两个对象,它们的 hashCode 一定相等,反之不成立。

  • hashCode 方法只有在集合中用到。

  • String、Integer、Boolean、Double 等这些类都重写了 equalshashCode 方法,这两个方法是根据对象的内容来比较和计算hashCode 的。

为什么重写 equels 方法就必须重写 hashCode 方法?

1)如果两个对象根据 equals 返回 True,根据定义,则其 hashCode 方法返回的 hash 值一定要相等,则就必须重写 hashCode 方法,直接使用 Object 类的 hashCode 方法不一定相等;

2)如果两个对象根据 equals 返回 False,不要求 hashCode 必须不一样,但为不同的对象产生不同的整数结果可以提高哈希表的性能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值