我尝试创建一个元组类,它允许Java中类似元组的结构。元组中两个元素的一般类型分别是X和Y。我试图为这个类重写一个正确的等号。
问题是,我知道Object.equals是默认的,它仍然根据"==“这样的引用进行比较,所以我不太确定我能不能使用它。我查看了对象,其中有相等()。这个还比较参考,还是比较内容?
快速地将返回语句想象成如下所示:
return Objects.equals(compared.prev, this.prev) && Objects.equals(compared.next, this.next);其中prev和next是元组的元素。这个能行吗?
发布于 2015-12-28 02:20:03
不同之处在于,Objects.equals()认为两个空值是“相等”的。伪码是:
null或同一个对象,则返回truenull,则返回falseequals()方法的结果这意味着它是“空安全”(尽管有第一个参数的equals()方法的非空安全实现)。
发布于 2021-10-25 14:57:53

这是java源代码中的文字代码:如您所见,@Agent_L是正确的。
发布于 2019-12-25 12:51:19
您的问题的答案是“这个Objects.equals仍然在引用上比较,还是在内容上比较?”-- Objects.equals对引用做了一些比较,但是它期望第一个参数的类实现相等(),在这个类中,内容的比较和引用一样。
关于tupple类中等于的实现的第二个问题,将prev和next作为其tupple属性,答案是:您建议的实现只有在prev和next是原语或它们的类型实现相等的情况下才能正常工作。因此,例如,如果prev是Foo类型,那么只有类Foo按预期实现相等时,才可以使用Objects.equals测试两个Foo的。
https://stackoverflow.com/questions/34486832
复制相似问题