Java中对象的比较
这是我的申请表Java中对象的比较,java,Java,这是我的申请表 public class testwithmain { public static void main(String[]args) { Money m12CHF = new Money(12,"CHF"); System.out.println(m12CHF.amount()); Money m14CHF = new Money(14,"CHF"); System.out.println(m14CHF.amount()); Money
public class testwithmain {
public static void main(String[]args)
{
Money m12CHF = new Money(12,"CHF");
System.out.println(m12CHF.amount());
Money m14CHF = new Money(14,"CHF");
System.out.println(m14CHF.amount());
Money expected = new Money(26,"CHF");
System.out.println("expected "+expected.amount()+expected.currency());
Money result = m12CHF.add(m14CHF);
System.out.println("result "+result.amount()+result.currency());
System.out.println(expected.equals(result));
}
}
//-------------------------
public class Money {
private int fAmount;
private String fCurrency;
public Money(int amount, String currency) {
fAmount = amount;
fCurrency = currency;
}
public int amount() {return fAmount;}
public String currency() {return fCurrency;}
public Money add(Money m) {
return new Money(amount() + m.amount(), currency());
}
}
结果是:
12
14
expected 26CHF
result 26CHF
false
求你了,为什么我有假?
非常感谢。您的
Money
类缺少equals
方法的实现,这是Java了解表示m12CHF.add(m14CHF)
结果的对象和newmoney(26,“CHF”)
表示相同的对象所必需的,即使这两个对象是不同的Java对象
equals
中的代码应遵循以下常规模板:
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (!(o instanceof Money)) {
return false;
}
Money other = (Money) o;
... // Your code goes here
}
@Override
public int hashCode() {
return Objects.hash(fAmount, fCurrency);
}
您的实现需要将对象的
fAmount
和fCurrency
与other.fAmount
和other.fCurrency
中的值进行比较。使用equals
比较String
对象;数字可以与==
运算符进行比较。正如Nexevis所说,您需要重写equals方法(从对象类继承)
为什么必须这样做?
因为您正在使用的当前等于是对象类中的等于。Object的equals方法定义了两个对象在具有相同引用时是相同的这是什么
Money
类?您可能需要覆盖我猜的Money
类中的equals
方法,并定义它们的相等含义。公共类Money{private int fAmount;private String fCurrency;public Money(int amount,String currency){fAmount=amount;fCurrency=currency;}public int amount(){return fAmount;}public String currency(){return fCurrency;}public Money add(Money m){return new Money(amount()+m.amount(),currency();}用这些信息编辑帖子,而不是作为评论。“看起来你的帖子主要是代码;请添加更多详细信息。”每当你重写equals时,你也必须重写hashCode。
@Override
public boolean equals(Object obj){
if(obj instanceof Money){
Money other = (Money)obj;
//now you define when two intance object of Money are equal...
}
//...
}