gpt4 book ai didi

java - 仅通过其唯一的实例 ID 来 equal() 类实例是不好的做法吗?

转载 作者:太空宇宙 更新时间:2023-11-04 14:03:18 24 4
gpt4 key购买 nike

我有一个类,在实例化时,为其对象创建一个唯一的 ID,如下所示:

public class Foo {

private final static AtomicInteger UNIQUE_ID = new AtomicInteger(0);
private final int id;
private final String name;
private final int hashcode;
public Foo(String name) {
id = UNIQUE_ID.GetAndIncrement();
this.name = name;
int result = 17;
int result = 31 * result + id;
int result = 31 * result + name.hashCode();
hashcode = result;
}
public int getInstanceID() { return id; }

现在我想这样实现 hashCode 和 equals:

    public boolean equals(Object obj) {

if (obj == this)
return true;
if (!(obj instanceof Foo))
return false;

Foo other = (Foo) obj;
return other.getInstanceID == getInstanceID();
}

public int hashCode() { return hashcode; }
}

如果我只比较对象的 ID,而不考虑任何其他可能与一个 Foo 距离不同的字段,这是否被认为是不好的做法?另外,我还应该考虑 hashcode 函数中的每个字段还是只使用 id?

最佳答案

嗯。契约是这样的 - 如果两个对象相等,它们必须具有相同的 hashCode。您还没有重写 hashCode(),因此您可以拥有 2 个具有不同哈希码的相等对象,这是错误的。重写hashcode()以遵守契约(Contract),那么它可能就可以了

关于java - 仅通过其唯一的实例 ID 来 equal() 类实例是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29106067/

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