And*_*tes 4 java overriding equals
我的任务是:
在Rational Numbers类中适当地重写equals()和hashCode()方法.
它进一步扩展了这一点.我的问题是,当你覆盖equals方法时,你是否更改了传入的参数?如果它检查逻辑等价,那么我已经完成了以下操作:
public boolean equals(Rational rhs){
if(this.num == rhs.num && this.denom == rhs.denom){
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是覆盖方法时的方法.如果是,那么当你重写hashcode方法时,选择一段好的代码来分配哈希码只是一个简单的工作吗?
另外,这是我创建的哈希码.这是沿着正确的方向吗?
@Override
public int hashCode(){
int hc = 17;
hc = 37 * hc + ((num == 0 && denom == 0) ? 0 : num);
return 37 * hc + denom;
//boolean b = cond ? boolExpr1 : boolExpr2;
//if cond true then b=boolExpr1 else b=boolExpr2
}
Run Code Online (Sandbox Code Playgroud)
你的equals方法不覆盖Object的equals.为了覆盖它,参数必须是a Object.
@Override
public boolean equals(Object other){
if (!(other instanceof Rational))
return false;
Rational rhs = (Rational) other;
if(this.num == rhs.num && this.denom == rhs.denom){
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
请注意,@Override注释可帮助您检测您要覆盖方法但重载它的情况.如果将该注释放在原始方法中,则会出现编译错误,因为您的方法没有覆盖任何方法(假设您的Rational类没有扩展或实现某个包含boolean equals(Rational rhs)方法的类/接口).
你可以这样做,因为这不会覆盖equals(Object)你仍然需要这样做
public boolean equals(Object o) {
return o instanceof Rational && equals((Rational) o);
}
Run Code Online (Sandbox Code Playgroud)
原因equals(Object)是你可能有许多不同类型的集合.
List list = Arrays.asList(1, "Hello", new Rational(1, 2));
// needs to be able to compare with 1 and "Hello"
list.contains(new Rational(1, 2));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1270 次 |
| 最近记录: |