¿Qué hace el método equals() en Java?
sobes.tech AI
Respuesta de la IA
El método equals() en Java se utiliza para comparar dos objetos por igualdad. Por defecto, en el caso de objetos que heredan de Object sin sobrescribirlo, compara las referencias de los objetos (==), es decir, verifica si las variables apuntan a la misma ubicación de memoria.
Sobrescribir correctamente el método equals() es importante para comparar objetos por su contenido, no por su ubicación en memoria.
Al sobrescribir equals(), se deben seguir las siguientes reglas:
- Reflexividad: para cualquier objeto no nulo
x,x.equals(x)debe devolvertrue. - Simetría: para cualquier par de objetos no nulos
xyy, six.equals(y)devuelvetrue, entoncesy.equals(x)también debe devolvertrue. - Transitividad: para objetos no nulos
x,yyz, six.equals(y)devuelvetrueyy.equals(z)devuelvetrue, entoncesx.equals(z)también debe devolvertrue. - Consistencia: para objetos no nulos
xyy, múltiples llamadas ax.equals(y)deben devolver consistentemente el mismo resultado, siempre que la información utilizada para la comparación no cambie entre llamadas. - Para cualquier objeto no nulo
x,x.equals(null)debe devolverfalse.
Normalmente, al sobrescribir equals(), también se debe sobrescribir el método hashCode(), manteniendo el contrato: si dos objetos son iguales según equals(), sus códigos hash, devueltos por hashCode(), deben ser iguales. La reciprocidad no es obligatoria: si los códigos hash son iguales, los objetos no necesariamente son iguales.
Ejemplo de sobrescritura:
public class MyObject {
private int value;
private String name;
public MyObject(int value, String name) {
this.value = value;
this.name = name;
}
@Override
public boolean equals(Object o) {
// Comparación en sí
if (this == o) return true;
// Verificación de null y tipo de objeto
if (o == null || getClass() != o.getClass()) return false;
// Conversión de tipo y comparación por campos
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Generación del código hash basada en los campos
return Objects.hash(value, name);
}
// getters, setters, etc.
}