创建一个equals方法

时间:2014-03-17 19:05:44

标签: java equals

根据作业,我必须创建一个名为" equals"的方法。做以下事情:

  

该方法将调用对象的实例变量与实例变量进行比较   参数对象的相等性,如果美元和美分,则返回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;
}

2 个答案:

答案 0 :(得分:1)

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

您还需要return status;行,如您问题下方的评论中所述。

最后,也许要求所有内容的最大变化,你没有equals()的方法签名正确。正如您在JavaDoc中看到的那样,该方法旨在将Object作为参数,而不是Money的另一个实例。通常,您会执行以下操作:

@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等)没有任何方法(包括.equals()),您必须使用{{1}来比较这些字段而不是==,如上例所示。

这不是最完整的解决方案(有很多好的信息可以回答this question),如果您要修改.equals(),还应该覆盖Object.hashCode(),以保留它们< EM>一致的

答案 1 :(得分:1)

dollarscents原始long类型吗?

你想使用(dollar == otherObject.dollars)&amp;&amp; (美分== otherObject.cents)如果是的话。您无法在基元上调用方法(例如equals())。