gpt4 book ai didi

java - 这是契约(Contract)满足等于实现吗?

转载 作者:行者123 更新时间:2023-11-29 09:46:21 25 4
gpt4 key购买 nike

在书上看到的:

给定:

class SortOf {
String name;
int bal;
String code;
short rate;
public int hashCode() {
return (code.length() * bal);
}
}

执行以下操作:

public boolean equals(Object o) {
return ((SortOf)o).code.length() * ((SortOf)o).bal * ((SortOf)o).rate == this.code.length() * this.bal * this.rate;
}

满足 equals 契约?

最佳答案

假设 SortOf Acode = "AA";平衡=2; rate=2SortOf Bcode = "A";平衡=4;速率=2;然后对于A, code.length = 2, bal = 2, rate = 2B code.length = 1bal = 4rate=2。然后 A.equals(B) 但是 A.hashCode() != B.hashCode()

除了您与代码有关的其他问题外,我认为这违反了契约(Contract)。

编辑添加:实际上,equals() 的定义可能在技术上满足 Object.equals() 的约定。 ,这对与 hashCode() 的一致性没有要求。这是Object.hashCode()的契约(Contract)其契约(Contract)要求与 equals() 保持一致。什么是小头脑和愚蠢的一致性......?

这个equals() 是自反的、对称的、传递的、一致的。我猜它违反了契约(Contract),因为 .equals(null) 抛出了异常,而不是按要求返回 false。所有关于 hashCode()equals() 规范都是:

Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.

关于java - 这是契约(Contract)满足等于实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3964824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com