Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中对象的比较_Java - Fatal编程技术网

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...
   }
   //...
}