Junior
O que faz o método equals() em Java?
sobes.tech IA
Resposta da IA
O método equals() em Java é usado para comparar o conteúdo de dois objetos. Por padrão, na classe Object, ele compara referências de objetos, ou seja, verifica se duas variáveis apontam para o mesmo objeto na memória.
No entanto, a maioria das classes em Java (por exemplo, String, Integer) redefine esse método para comparar os valores contidos nos objetos, e não suas referências.
Ao redefinir equals(), é importante seguir seu contrato:
- Reflexividade:
x.equals(x)deve sertruepara qualquerxnão nulo. - Simetria:
x.equals(y)deve sertruese e somente sey.equals(x)fortruepara quaisquerxeynão nulos. - Transitividade: Se
x.equals(y)ey.equals(z)sãotrue, entãox.equals(z)também deve sertruepara quaisquerx,yeznão nulos. - Consistência: Múltiplas chamadas a
x.equals(y)devem retornar o mesmo resultado, desde que os objetos não tenham sido alterados. - Para qualquer
xnão nulo,x.equals(null)deve serfalse.
Exemplo de redefinição de equals():
class MyObject {
private int value;
public MyObject(int value) {
this.value = value;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
MyObject myObject = (MyObject) obj;
return value == myObject.value;
}
}
Uso de equals():
// Comparação por referência (por padrão em Object)
Object obj1 = new Object();
Object obj2 = new Object();
boolean porReferencia = obj1.equals(obj2); // false
// Comparação por valor (em `equals` redefinido)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean porValor = myObj1.equals(myObj2); // true
Também é importante redefinir o método hashCode() ao redefinir equals(), para manter seu contrato e evitar problemas com coleções que usam hashing (por exemplo, HashMap, HashSet).