Objects.equals 和 Object.equals
Objects.equals and Object.equals
我尝试创建一个允许在 Java 中使用类元组结构的元组 class。元组中两个元素的一般类型分别是 X 和 Y。我尝试为此 class.
覆盖正确的等号
事实是,我知道 Object.equals 属于默认设置,它仍然根据“==”之类的引用进行比较,所以我不确定我是否可以使用它。我查看了对象,里面有一个 equals() 。这个还是比较参考文献,还是比较内容?
很快将 return 语句想象成这样:
return Objects.equals(compared.prev, this.prev) && Objects.equals(compared.next, this.next);
其中 prev 和 next 是元组的元素。这行得通吗?
Objects.equals 只是调用它的第一个参数 .equals 方法。在 java 中,如果您希望能够在您创建的 class 实例中测试相等性,那么您必须覆盖 equals 方法。 instance.equals() 仅在该实例类型未覆盖 equals 方法时才使用 ==。
区别在于 Objects.equals()
将两个空值视为 "equal"。伪代码为:
- 如果两个参数都是
null
或同一个对象,returntrue
- 如果第一个参数是
null
return false
- return将第二个参数传给第一个参数
equals()
方法的结果
这意味着它是 "null safe"(第一个参数的 equals()
方法的非 null 安全实现)。
你问题的答案 "Does this one [Objects.equals] still compare on references, or it compares on contents?" - Objects.equals 对引用做了一些比较,但它期望第一个参数的 class 实现 equals() 其中内容的比较是做的和参考的一样。
你的第二个问题是在你的类元组 class 中实现 equals 有 prev 和 next 作为它的元组属性答案是:你建议的实现只有在
prev 和 next 是原语,或者它们的类型是否正确实现了 equals。
因此,如果 prev 例如是 Foo 类型,那么只有当 class Foo 按预期实现 equals 时,您才可以使用 Objects.equals 来测试两个 Foo。
这是来自 java 来源的文字代码:如您所见,@Agent_L 是正确的
我尝试创建一个允许在 Java 中使用类元组结构的元组 class。元组中两个元素的一般类型分别是 X 和 Y。我尝试为此 class.
覆盖正确的等号事实是,我知道 Object.equals 属于默认设置,它仍然根据“==”之类的引用进行比较,所以我不确定我是否可以使用它。我查看了对象,里面有一个 equals() 。这个还是比较参考文献,还是比较内容?
很快将 return 语句想象成这样:
return Objects.equals(compared.prev, this.prev) && Objects.equals(compared.next, this.next);
其中 prev 和 next 是元组的元素。这行得通吗?
Objects.equals 只是调用它的第一个参数 .equals 方法。在 java 中,如果您希望能够在您创建的 class 实例中测试相等性,那么您必须覆盖 equals 方法。 instance.equals() 仅在该实例类型未覆盖 equals 方法时才使用 ==。
区别在于 Objects.equals()
将两个空值视为 "equal"。伪代码为:
- 如果两个参数都是
null
或同一个对象,returntrue
- 如果第一个参数是
null
returnfalse
- return将第二个参数传给第一个参数
equals()
方法的结果
这意味着它是 "null safe"(第一个参数的 equals()
方法的非 null 安全实现)。
你问题的答案 "Does this one [Objects.equals] still compare on references, or it compares on contents?" - Objects.equals 对引用做了一些比较,但它期望第一个参数的 class 实现 equals() 其中内容的比较是做的和参考的一样。
你的第二个问题是在你的类元组 class 中实现 equals 有 prev 和 next 作为它的元组属性答案是:你建议的实现只有在 prev 和 next 是原语,或者它们的类型是否正确实现了 equals。 因此,如果 prev 例如是 Foo 类型,那么只有当 class Foo 按预期实现 equals 时,您才可以使用 Objects.equals 来测试两个 Foo。