使用方法equals()修复测试并覆盖此方法并使用hashCode()

时间:2016-08-03 12:26:54

标签: java unit-testing object override roman-numerals

我尝试测试我的代码,但最后一个System.out.printl没有回答,为什么?

@Test
public void testcopy(){
    RomanNumber rn1 = new RomanNumber("M");
    RomanNumber rn2 = new RomanNumber("M");
    RomanNumber rn1_copy = rn1;
    System.out.println("rn1 == rn1_copy is "
            + (rn1 == rn1_copy));
    System.out.println("rn1 == rn2 is " + (rn1 == rn2));
    System.out.println("rn1.equals(rn2) is " + (rn1.equals(rn2)));
}

同样,我想覆盖超类equals()的{​​{1}}方法,我试过这个:

Object

最后,我在下面发布所有代码:

public boolean equals(Object obj) {
    if ((obj instanceof RomanNumber)) {
        RomanNumber decimal = (RomanNumber) obj;
        if (number == decimal.convertToInteger () && number.equals(decimal.convertToInteger) ) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

谢谢。

1 个答案:

答案 0 :(得分:0)

你的第一个问题是

1)不兼容的操作数类型String和int

number == decimal.convertToInteger ()

您无法直接比较String和int

您可以通过删除

行解决问题

2)number.equals(decimal.convertToInteger())

此处您传递的号码为M。 但是decimal.convertToInteger()返回1000

所以这不适合比较两个对象是否相等

如何解决?

public boolean equals(Object obj){
    if ((obj instanceof RomanNumber)) {
        RomanNumber decimal = (RomanNumber)obj;
        if (number.equals(decimal.number)) {
            return true;
        }
        else {
            return false;
        }
    }
    else {
        return false;
    }
}