纳兰性德
  • 微信号:17764149196
您当前的位置:首页  > 后端  > Java

重学java(五)equals和==、equals和hashcode的区别

作者:久伴轻尘 时间:2021年08月18日 阅读数:486

关系操作符==

若操作数的类型是基本数据类型,则该关系操作符判断的是左右两边操作数的值是否相等

若操作数的类型是引用数据类型,则该关系操作符判断的是左右两边操作数的内存地址是否相同。也就是说,若此时返回true,则该操作符作用的一定是同一个对象。

equals

equals方法是基类Object中的实例方法,因此对所有继承于Object的类都会有该方法,他用来判断两个对象的内存地址是否一致

public boolean equals(Object obj) {
    return (this == obj);
}

hashcode

在 Java 中,由 Object 类定义的 hashCode 方法会针对不同的对象返回不同的整数。(这是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧)

equals与==的区别

由Object类的定义可以看出 默认的equals方法和==并无差别,但是可以在子类中重写equals方法,增加自己不同的判断

equals与hashcode的区别

equals是比较两个对象的地址是否相同,而hashcode是针对不同的对象返回一个整数,如果hashcode的算法不是很好会出现两个不相同的对象出现相同的hashcode

注意:在类中重写equals方法的时候必须要重写类的hashcode方法,不然会导致equals相等的两个对象hashcode值不同 这样是不被允许的

如果两个对象相等,那么它们的哈希值一定相同。如果两个对象的哈希值相同,这个两个对象不一定相等

为什么两个对象有相同的hashcode值,它们也不一定是相等的? 一句话hash碰撞

因为hashcode()所使用的杂凑算法也许刚好会让多个对象传回相同的杂凑值。越糟糕的杂凑算法越容易碰撞,但这也与数据值域分布的特性有关(所谓碰撞也就是指的是不同的对象得到相同的hashcode。)

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我删除。邮箱:577955659@qq.com

标签: equals hashcode

久伴轻尘

人生若只如初见,何事秋风悲画扇