面试题大揭秘!Java中== 与equals的区别?

大家好,我是你们的小米!今天我们要来聊一个在Java面试中经常被问到的问题:==equals 的区别。这可是一个重要而且常常令人头疼的问题哦!废话不多说,咱们马上开启今天的探索之旅吧!

背景知识

在开始深入探讨 ==equals 的区别之前,先让我们复习一下一些相关的背景知识。

  • == 运算符:在Java中,== 运算符用于比较两个对象的引用是否相等,即它们是否指向内存中的同一个对象。
  • equals 方法:equals 是一个定义在 java.lang.Object 类中的方法,用于比较两个对象的内容是否相等。子类可以重写这个方法,以实现自定义的相等比较逻辑。

引用比较 vs 内容比较

首先,我们来看一下 ==equals 的最大区别:它们进行的比较方式不同。

  • == 比较的是两个对象的引用,也就是它们在内存中的地址是否相同。如果两个对象的引用相同,那么 == 返回 true,否则返回 false
  • equals 比较的是两个对象的内容。换句话说,就是通过调用对象的 equals 方法,自定义的逻辑来判断两个对象是否相等。默认情况下,equals 方法和 == 运算符的效果是一样的,都是比较引用。

重写equals的意义

你可能会问,既然默认情况下 equals== 都是比较引用,那为什么还需要重写 equals 方法呢?

这是个好问题!Java中的很多类,比如 StringInteger 等,都已经重写了 equals 方法,使其能够进行内容比较。这就是为什么我们可以这样做:

如果没有重写 equals,上述代码块是不会被执行的,因为默认情况下 equals 比较的是引用。

示例

为了更好地理解这两者的区别,我们举个实例来说明。

在这个例子中,我们定义了一个 Person 类,重写了 equals 方法,用于比较两个 Person 对象的 name 字段是否相等。接下来我们来看几个例子:

从输出结果中可以看出,== 对于 person1person2 来说返回 false,因为它们是不同的对象。而 equals 则返回 true,因为我们重写了 equals 方法来比较内容。

END

在本篇文章中,我们深入探讨了 ==equals 在Java中的区别。我们了解到,== 是用于引用比较,而 equals 是用于内容比较。同时,我们也明白了重写 equals 方法的重要性,以便能够实现自定义的相等比较逻辑。

希望通过本文的解析,大家能够更加清楚地理解 ==equals 在Java中的作用和区别。在面试中,如果被问到这个问题,你也能从容地回答出来啦!

如果你喜欢这篇文章,记得点赞、评论和分享哦!如果有任何疑问或建议,也欢迎在评论区留言,我会及时回复的。感谢大家的支持,我们下期见!

如有疑问或者更多的技术分享,欢迎关注我的微信公众号“知其然亦知其所以然”!

猜你喜欢

转载自blog.csdn.net/en_joker/article/details/132427935