and*_*qee 5 java overriding equals
有两种等于方法?
public boolean equals(Bigram b) {
return b.first == first && b.second == second;
}
@Override public boolean equals(Object o) {
if (!(o instanceof Bigram))
return false;
Bigram b = (Bigram) o;
return b.first == first && b.second == second;
}
Run Code Online (Sandbox Code Playgroud)
与2种方法相比,当我们想要覆盖等于方法时,为什么我们需要定义一个参数类型为Object的equals方法!
实际上有一个很好的理由:
equals(Object)方法来覆盖超类equals方法java.lang.Objectequals(Bigram)方法来处理编译器在编译时可以证明该类型是Bigram的情况.这样可以避免类型检查/转换,从而提高性能,并为代码提供更好的类型检查.通常情况下,最好实现它们,以便一个方法调用另一个方法,例如:
public boolean equals(Bigram b) {
return b.first == first && b.second == second;
}
@Override public boolean equals(Object o) {
if (!(o instanceof Bigram)) return false;
return equals((Bigram)o);
}
Run Code Online (Sandbox Code Playgroud)
这种方式更简洁,意味着您只需要实现一次相等测试逻辑(不要重复自己!).
| 归档时间: |
|
| 查看次数: |
1561 次 |
| 最近记录: |