这里是新手问题:
所以在我的大学作业中,我必须为我创建的新类覆盖对象类 equals 方法。
新类是“Product”,每个产品都有一个唯一的“id”属性。所以这就是我重写它的方式:
@Override
public boolean equals(Object obj) {
final Product other = (Product) obj;
if (id != other.id)
return false;
return true;
}
事情是,这样做是 1.5 分(满分 10 分),这让我怀疑是不是那么容易。所以我开始搜索,我发现了类似的东西:
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Product other = (Product) obj;
if (id != other.id)
return false;
return true;
}
这对我来说根本没有意义,因为我认为最后一个 if 检查所有其他 ifs 限制。你们怎么看?Override this method 的更好方法是什么?
谢谢!
最佳答案
第二段代码更好:
- 它针对
x.equals(x)
进行了优化,这对于正确性来说不是必需的,但却是一种有用的优化 - 它处理
x.equals(null)
而不是抛出NullPointerException
- 它处理完全不同类的对象而不会抛出您的类会抛出的
ClassCastException
(例如x.equals("foo")
) - 它需要完全相同的类型来提供对称关系;否则
obj.equals(x)
可以调用不同的方法,给出不同的结果。
关于java - 覆盖等于方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6364258/