Fra*_*ani 0 java equality equals object-comparison
我有两个同一个类的实例.
public class Gilda {
private String nome;
public Gilda(String nome) {
this.nome = nome;
}
// More stuff
}
Run Code Online (Sandbox Code Playgroud)
当尝试通过Object.equals(Object)方法比较它们时,它返回false.这很奇怪,因为nome在这两个实例上具有相同的值.
比较如何运作?这是预期的行为吗?我应该覆盖那种方法吗?
是的,你必须覆盖它.如果不这样做,则使用Object自身提供的版本,默认为引用相等(它们是相同的"物理"对象).
根据您的IDE,可以自动为您编写.例如,IntelliJ 14就是为我写的:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Gilda gilda = (Gilda) o;
if (nome != null ? !nome.equals(gilda.nome) : gilda.nome != null) return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
当然,不要忘记hashCode,这应该始终在同一时间完成equals:
@Override
public int hashCode() {
return nome != null ? nome.hashCode() : 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49 次 |
| 最近记录: |