我正在尝试创建一个有理数字类并覆盖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;
}
答案 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。