首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objects.equals和Object.equals

Objects.equals和Object.equals
EN

Stack Overflow用户
提问于 2015-12-28 01:56:59
回答 4查看 56.2K关注 0票数 44

我尝试创建一个元组类,它允许Java中类似元组的结构。元组中两个元素的一般类型分别是X和Y。我试图为这个类重写一个正确的等号。

问题是,我知道Object.equals是默认的,它仍然根据"==“这样的引用进行比较,所以我不太确定我能不能使用它。我查看了对象,其中有相等()。这个还比较参考,还是比较内容?

快速地将返回语句想象成如下所示:

代码语言:javascript
复制
return Objects.equals(compared.prev, this.prev) && Objects.equals(compared.next, this.next);

其中prev和next是元组的元素。这个能行吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-12-28 02:20:03

不同之处在于,Objects.equals()认为两个空值是“相等”的。伪码是:

  1. 如果两个参数都是null或同一个对象,则返回true
  2. 如果第一个参数是null,则返回false
  3. 返回将第二个参数传递给第一个参数的equals()方法的结果

这意味着它是“空安全”(尽管有第一个参数的equals()方法的非空安全实现)。

票数 85
EN

Stack Overflow用户

发布于 2021-10-25 14:57:53

这是java源代码中的文字代码:如您所见,@Agent_L是正确的。

票数 3
EN

Stack Overflow用户

发布于 2019-12-25 12:51:19

您的问题的答案是“这个Objects.equals仍然在引用上比较,还是在内容上比较?”-- Objects.equals对引用做了一些比较,但是它期望第一个参数的类实现相等(),在这个类中,内容的比较和引用一样。

关于tupple类中等于的实现的第二个问题,将prev和next作为其tupple属性,答案是:您建议的实现只有在prev和next是原语或它们的类型实现相等的情况下才能正常工作。因此,例如,如果prev是Foo类型,那么只有类Foo按预期实现相等时,才可以使用Objects.equals测试两个Foo的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34486832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档