Java 创建equals方法

Java 创建equals方法,java,equals,Java,Equals,根据作业,我必须创建一个名为“equals”的方法来执行以下操作: @Override public boolean equals(Object object) { if (object == null || !(object instanceof Money)) { return false; } Money other = (Money) object; return this.value.equals(other.value)

根据作业,我必须创建一个名为“equals”的方法来执行以下操作:

@Override
public boolean equals(Object object) {
    if (object == null || !(object instanceof Money)) {
        return false;
    }

    Money other = (Money) object;

    return this.value.equals(other.value)
            && this.secondField.equals(other.secondField)
            && this.primitiveField == other.primitiveField;
}
该方法将调用对象的实例变量与实例变量进行比较 如果参数对象的美元和美分相等,则返回
true
调用对象与参数对象的美元和美分相同。 否则,它将返回
false

更新:我犯了一个错误,放错了东西,更新了它。出现新错误:

Money.java:115: error: long cannot be dereferenced
  if (dollars.equals(otherObject.dollars) &&
             ^
Money.java:116: error: long cannot be dereferenced
     cents.equals(otherObject.cents))
          ^
2 errors
使用以下方法:

   public boolean equals(Money otherObject)
{
  boolean status;

  if (dollars.equals(otherObject.dollars) &&
     cents.equals(otherObject.cents))
    return status = true;
  else
    return status = false;
}

因此,您的两个错误都试图告诉您,无论出于何种原因,
Money
类没有名为
symbol
的字段。因此,我会先确认该字段的名称,然后再更正它

您还需要一个
返回状态行,如问题下方的注释所述

最后,可能需要最大的更改,您没有正确的方法签名。从JavaDoc中可以看到,该方法旨在将
对象
作为参数,而不是
货币
的另一个实例。通常,您会执行以下操作:

@Override
public boolean equals(Object object) {
    if (object == null || !(object instanceof Money)) {
        return false;
    }

    Money other = (Money) object;

    return this.value.equals(other.value)
            && this.secondField.equals(other.secondField)
            && this.primitiveField == other.primitiveField;
}
由于基本类型(
int
s、
long
s等)没有任何方法(包括
.equals()
),因此必须使用
=
而不是
.equals()
来比较这些字段,如上面的示例所示


这并不是最完整的解决方案(有很多很好的信息可以回答),如果要修改
equals()
,也应该重写,以保持它们的一致性。

美元
美分
基本
类型吗


如果是,您可能希望使用(美元==其他对象.美元)&&&(美分==其他对象.美分)。您不能调用方法(例如
equals()
)在原语上。

你的
Money
类是否定义了
symbol
实例变量?你能发布Money类/接口吗?找不到symbol
symbol
你需要在
equals
的末尾返回
status
。顺便说一句,这不是一个有效的
equals
覆盖。我检查过了,我不知道为什么要放置符号。我的两个实例字段的长度分别为“美元”和“美分”。这导致了一个新的错误,因此我必须进行编辑。必须是心不在焉地放置符号。@WillBro更新为包含原语的比较(例如,
long
)字段,这就是导致新错误的原因。需要首先检查
对象是否为null,以及它是否返回false。还需要检查
this.getClass()!=other.getClass()
。instanceOf也做同样的事情,tooThanks@GIJoe-键入有点匆忙,我必须承认通常使用IDE生成的
equals()
hashCode()
方法在大多数情况下都是起点!