【发布时间】:2014-10-18 23:40:46
【问题描述】:
我有两个arrayLists<myObject>,其中myObject 是我创建的自定义类的对象。我希望能够使用equals() 方法比较这些数组列表。
在阅读并寻找答案后,我了解到某些对象(如 int[])只有在引用同一事物时才被 equals() 方法视为相等。
为了解决这个问题,我尝试在我的自定义对象中覆盖 equals 方法。我的对象有 3 个属性(所有基本类型),所以如果所有 3 个属性都等于比较对象的属性,我的 equals 方法现在返回 true,否则返回 false。但是,比较数组列表仍然不起作用。我做错了什么?
请原谅我解释代码而不是发布它,我这样做是因为变量和名称不是英文的。
编辑:好的,这是代码。 Compra 是我的自定义类; cantidad,concepto 和 id 是它的属性。
@Override
public boolean equals(Object obj) {
boolean result = true;
if (obj == null) {
result = false;
}else{
Compra comprobada = (Compra) obj;
if(!(this.id == comprobada.getId())){
result = false;
}
if(!(this.cantidad == comprobada.getCantidad())){
result = false;
} if(!this.concepto.equals(comprobada.getConcepto())){
result = false;
}
}
return result;
}
【问题讨论】:
-
你是什么意思,“仍然不起作用”?发布您的代码、您期望它做什么以及它实际做什么。
-
如果你担心英文变量,那么写一个SSCCE 用英文来演示这个问题。您的书面解释不足以让我们为您提供帮助。
-
@StephenCI 更新了问题以包含一些代码。那是我的 equals 方法,我尝试比较由这些对象组成的两个数组列表,但结果不应该是错误的。
-
如果
id、cantidad或concepto是字符串,那么你需要使用.equals(),而不是==。 -
在下面查看我的答案,并告诉我您是否在代码中发现了一些使事情无法正常工作的内容;) - 您的代码在我的示例中运行良好