equals与==区别

简介: equals与==区别

以下都是Java的基础面试题,相信大家都会有种及眼熟又陌生的感觉、看过可能在短暂的面试后又马上忘记了。JavaPub在这里整理这些容易忘记的重点知识及解答建议收藏,经常温习查阅

4. equals与==区别

"=="是判断两个变量或实例是不是指向同一个内存空间。

"equals"是判断两个变量或实例所指向的内存空间的值是不是相同。

除了这俩点,这个问题大概率会引出以下问题:

为什么重写equals还要重写hashcode?

通过上面俩条我们知道 "equals"是判断两个变量或实例所指向的内存空间的值是不是相同。 但是一些特殊场景,我们需要对比俩个对象是否相等,例如:User user1 = new User(); User user2 = new User(); user1 和 user2 对比。v这是我们就需要重写 equals 方法。

所以可以通过重写equals()方法来判断对象的值是否相等,但是有一个要求:equals()方法实现了等价关系,即:

  • 自反性:对于任何非空引用x,x.equals(x)应该返回true;
  • 对称性:对于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true
  • 传递性:对于任何引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true;
  • 一致性:如果x和y引用的对象没有发生变化,那么反复调用x.equals(y)应该返回同样的结果;
  • 非空性:对于任意非空引用x,x.equals(null)应该返回false;

到这里也是一个很正常的操作,但是当我们要用到 HashSet 等集合时。存储的对象我们需要用 hashcode 判断对象是否存在,如果使用 Object 默认的hashcode方法,那我们同样属性的俩个用户一定是不相等的(例如下面user3、user4),因为内存地址不同,这并不符合我们的业务,所以决定了重写 hashcode 的必要性。

User user3 = new User("JavaPub", "man", "1996-08-28")
User user4 = new User("JavaPub", "man", "1996-08-28")

目录
相关文章
|
2月前
|
Java
== 和 equals 有什么区别?
本文解释了在Java中,"=="用于比较基本数据类型的值或引用类型的引用是否相等,而"equals"默认也是比较引用,但常常被重写为比较对象的值是否相等,例如在String和Integer类中,并且提供了如何自定义"equals"方法的示例。
119 0
== 和 equals 有什么区别?
|
2月前
|
C# 开发者
【捞底干货】C#中equals和==运算符的区别
【捞底干货】C#中equals和==运算符的区别
64 1
|
4月前
|
Java
“a == b” 和 “a.equals(b)” 的区别
【8月更文挑战第22天】
65 0
equals 和 == 的区别?
equals 和 == 的区别?
85 0
|
Java
== 和 equals 的区别是什么
== 运算符用于比较两个对象的引用是否相等。它对于基本类型比较值的相等性,对于引用类型比较引用的相等性。当使用 == 比较两个对象时,它会检查它们是否指向相同的内存地址。如果两个对象具有相同的内存地址,则它们被认为是相等的。
73 1
|
Java
==和equals()
==和equals()
86 0
equals和 == 的区别
equals和 == 的区别
83 0
|
存储 Java
详解“==”和equals的区别
“==”和equals 最大的区别是 “==”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。 equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值。
|
存储 Java
“==”和equals 最大的区别
“==”和equals 最大的区别是 “==”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。 equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值。