压倒等于方法问题

时间:2014-02-10 22:38:34

标签: java override

我正在尝试创建一个有理数字类并覆盖equals和hash代码方法。但是,如果明显不正确,那么我的平等就会回归真实,即分子和分母是不同的。知道是什么原因引起的吗?

public boolean equals(Object rhs) {
    if (this == rhs){
        return true;
    }
    if (rhs == null){
        return false;
    }
    if (!(rhs instanceof Rational)){
        return false;
    }
    Rational other = (Rational) rhs;
    if (denom == other.denom){
        if (num == other.num);{
            return true;
        }
    }
    return false;
}

3 个答案:

答案 0 :(得分:4)

这是问题(如果不是拼写错误):

if (num == other.num);{

分号表示if语句是一个空语句,因此它的评估并不真正涉及等于验证过程。只需删除分号:

if (num == other.num){

答案 1 :(得分:1)

删除此行上的分号,该分号作为if语句的正文。

if (num == other.num);{

使用分号,如果分母相等,则返回true;有效地忽略了分子的检查。

答案 2 :(得分:1)

移除;之后的if (num == other.num); {,将其改为if (num == other.num) {

离开那里,它基本上在if之后什么都不做,然后进入区块:

{
    return true;
}

因此,此时它总会返回true。