Java 覆盖等于方法问题
我试图创建一个有理数类并重写equals和hash代码方法。但我的等式在明显不成立的情况下(分子和分母不同)又变为真。你知道这是什么原因吗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)){
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
;有效地忽略了对分子的检查。删除如果(num==other.num),则在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){