猿问

比较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 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

拜托,为什么我有 false ?太感谢了。


泛舟湖上清波郎朗
浏览 124回答 2
2回答

BIG阳

您的Money类缺少方法的实现equals,这是为了让 Java 知道表示结果的对象m12CHF.add(m14CHF)和new Money(26,"CHF")表示同一事物的对象所必需的,即使这两者是不同的 Java 对象。里面的代码equals应该遵循这个通用模板:@Overridepublic boolean equals(Object o) {     if (o == this) {         return true;     }     if (!(o instanceof Money)) {         return false;     }    Money other = (Money) o;     ... // Your code goes here}@Overridepublic int hashCode() {    return Objects.hash(fAmount, fCurrency);}您的实现需要将对象的fAmountand与和fCurrency中的值进行比较。用于比较对象;数字可以与运算符进行比较。other.fAmountother.fCurrencyequalsString==

开心每一天1111

您需要重写 equals 方法(它是从对象类继承的)@Overridepublic boolean equals(Object obj){   if(obj instanceof Money){     Money other = (Money)obj;     //now you define when two intance object of Money are equal...   }   //...}为什么这是必要的? 因为您正在使用的当前 equals 是来自 Object 类的 equals。对象的equals方法定义两个对象有相同的引用时是相同的
随时随地看视频慕课网APP

相关分类

Java
我要回答