Java 覆盖等于方法问题

Java 覆盖等于方法问题,java,overriding,Java,Overriding,我试图创建一个有理数类并重写equals和hash代码方法。但我的等式在明显不成立的情况下(分子和分母不同)又变为真。你知道这是什么原因吗 public boolean equals(Object rhs) { if (this == rhs){ return true; } if (rhs == null){ return false; } if (!(rhs instanceof Rational)){

我试图创建一个有理数类并重写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;
}

删除此行的分号,该分号充当
if
语句的主体

if (num == other.num);{

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

删除此行上的分号,该分号充当
if
语句的主体

if (num == other.num);{

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

删除
if之后使用code>;{
,如果(num==other.num){

如果将其保留在那里,则它在
之后基本不做任何操作,如果
,则进入块:

{
    return true;
}

因此,它将始终在该点返回true。

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

如果将其保留在那里,则它在
之后基本不做任何操作,如果
,则进入块:

{
    return true;
}
因此,在这一点上它将始终返回true。

问题在于(如果不是输入错误的话):

分号表示
if
语句是一个空语句,因此它的求值实际上不涉及equals验证过程。只需删除分号:

if (num == other.num){
问题是(如果不是打字错误):

分号表示
if
语句是一个空语句,因此它的求值实际上不涉及equals验证过程。只需删除分号:

if (num == other.num){