首页 > Java中==与equals、equals与hashCode
头像
悟空GGG
编辑于 2020-11-30 21:45
+ 关注

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的两个对象无论如何都不会相等。(即使这两个对象指向相同的数据)


全部评论

(1) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期精华帖

热门推荐