Cosa fa il metodo equals() in Java?
sobes.tech AI
Risposta dell'AI
Il metodo equals() in Java viene utilizzato per confrontare il contenuto di due oggetti. Per impostazione predefinita, nella classe Object, confronta i riferimenti degli oggetti, cioè determina se due variabili puntano allo stesso oggetto in memoria.
Tuttavia, la maggior parte delle classi in Java (ad esempio, String, Integer) ridefiniscono questo metodo per confrontare i valori contenuti negli oggetti, piuttosto che i loro riferimenti.
Quando si ridefinisce equals(), è importante rispettare il suo contratto:
- Riflessività:
x.equals(x)dovrebbe esseretrueper ognixnon nullo. - Simmetria:
x.equals(y)dovrebbe esseretruese e solo sey.equals(x)ètrueper ognixeynon nulli. - Transitività: Se
x.equals(y)ey.equals(z)sonotrue, allorax.equals(z)dovrebbe esseretrueper ognix,y,znon nulli. - Consistenza: Le chiamate multiple a
x.equals(y)dovrebbero restituire lo stesso risultato, a meno che gli oggetti non cambino. - **Per ogni
xnon nullo,x.equals(null)dovrebbe esserefalse.
Esempio di ridefinizione di 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;
}
}
Utilizzo di equals():
// Confronto per riferimento (predefinito in Object)
Object obj1 = new Object();
Object obj2 = new Object();
boolean perRiferimento = obj1.equals(obj2); // false
// Confronto per valore (dopo aver ridefinito `equals`)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean perValore = myObj1.equals(myObj2); // true
È inoltre importante ridefinire il metodo hashCode() quando si ridefinisce equals(), per mantenere il loro contratto e evitare problemi con le collezioni che utilizzano l'hashing (ad esempio, HashMap, HashSet).