Java中==与equals、equals与hashCode

Java中“==”与equals有什么区别?
“==”:对于基本数据类型来说,则直接对值进行比较。如果是引用数据类型,则是对他们的地址进行比较。因为Java只有值传递,所以对于==来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。
equals:equals是Object类提供的方法之一。每一个Java类都继承自Object类,所以每一个对象都具有equals方法。Object中的equals方法是直接使用“==”运算符比较的两个对象,所以在没有覆盖equals方法的情况下,equals与“==”运算符一样,比较的是地址。可以通过覆盖equals方法使之对数据的内容进行比较,如果两个对象的类型一致,内容一致则相等。

为什么重写equals时必须重写hashCode方法?
hashCode的作用是获取哈希码,也称为散列码,它实际上返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode定义在JDK的Object类中,这就意味着Java中的任何类都包含有hashCode函数。
如果两个对象相等,则hashcode一定也是相同的。两个对象相等,对两个对象分别调用equals方法都返回true。但是,两个对象有相同的hashcode值,它们也不一定是相等的。因此,equals方法被覆盖过,则hashCode方法也必须被覆盖。
hashCode的默认行为是对堆上的对象产生独特值。如果没有重写hashCode,则该class的两个对象无论如何都不会相等。(即使这两个对象指向相同的数据)


#Java#
全部评论
感谢参与牛客创作者计划!欢迎更多牛友来写干货,瓜分5000元奖励~~技术场活动链接:https://www.nowcoder.com/link/czztlqjs
点赞 回复 分享
发布于 2020-12-01 14:24

相关推荐

三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
2 10 评论
分享
牛客网
牛客企业服务