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

相关推荐

2 10 评论
分享
牛客网
牛客企业服务