gpt4 book ai didi

java - 正确覆盖 equals 方法

转载 作者:搜寻专家 更新时间:2023-11-01 02:53:36 25 4
gpt4 key购买 nike

我的老师给了我一个等于覆盖示例的解决方案,它是这样的:

@Override
public boolean equals(Object o)
{
if (this == o) return true;
boolean result = false;
if (o instanceof Product)
{
Product other = (Product)o;
result = this.id == other.id;
}
return result;
}

Product 类重写了该方法,该类具有每个产品唯一的属性 id。但是我不明白第一个 if 的意思,我认为第二个 if 已经检查了第一个的限制。任何人都可以给我一个这段代码有效的例子,而下面的这段代码不行吗?谢谢!

@Override
public boolean equals(Object o)
{
boolean result = false;
if (o instanceof Product)
{
Product other = (Product)o;
result = this.id == other.id;
}
return result;
}

最佳答案

两个代码示例都有效。第一个示例中的 if (this == o) return true; 是一个性能优化(很可能是过早的优化 - 总是首先分析),它检查对象是否是与自身相比。在 Java 中,== 运算符比较两个对象是否是同一个实例,而不是比较它们是否是具有相同数据的不同实例。

equals 方法有多种写法。以下是我通常的做法:

public boolean equals(Object obj) {
if (obj instanceof Product) {
Product that = (Product) obj;
return this.id == that.id;
}
return false;
}

如果我知道我的代码永远不会将该对象与其他类型的对象或与 null 进行比较,那么我什至可以编写如下所示的代码,以便无论如何发生它都会抛出异常 - 这意味着我的代码有一个错误,所以通过尽早失败,我会发现它并尽快修复它。

public boolean equals(Object obj) {
Product that = (Product) obj;
return this.id == that.id;
}

关于java - 正确覆盖 equals 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378725/

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