Τι κάνει η μέθοδος equals() στην Java;
sobes.tech AI
Απάντηση από AI
Η μέθοδος equals() στη Java χρησιμοποιείται για τη σύγκριση του περιεχομένου δύο αντικειμένων. Από προεπιλογή, στην κλάση Object, συγκρίνει τις αναφορές των αντικειμένων, δηλαδή, καθορίζει αν δύο μεταβλητές δείχνουν στο ίδιο αντικείμενο στη μνήμη.
Ωστόσο, οι περισσότερες κλάσεις στη Java (π.χ., String, Integer) επαναπροσδιορίζουν αυτή τη μέθοδο για να συγκρίνουν τις τιμές που περιέχονται στα αντικείμενα, και όχι τις αναφορές τους.
Όταν επαναπροσδιορίζετε το equals(), είναι σημαντικό να ακολουθείτε τον συμβόλαιό του:
- Αντανάκλαση:
x.equals(x)πρέπει να είναιtrueγια κάθεxπου δεν είναι null. - Συμμετρία:
x.equals(y)πρέπει να είναιtrueαν και μόνο ανy.equals(x)είναιtrue, για κάθεxκαιyπου δεν είναι null. - Μεταβιβαστικότητα: Αν
x.equals(y)καιy.equals(z)είναιtrue, τότε καιx.equals(z)πρέπει να είναιtrue, για κάθεx,y,zπου δεν είναι null. - Συνέπεια: Πολλαπλές κλήσεις του
x.equals(y)πρέπει να επιστρέφουν το ίδιο αποτέλεσμα, εφόσον τα αντικείμενα δεν έχουν αλλάξει. - **Για κάθε
xπου δεν είναι null, τοx.equals(null)πρέπει να είναιfalse.
Παράδειγμα επαναπροσδιορισμού του 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;
}
}
Χρήση του equals():
// Σύγκριση με αναφορά (προεπιλογή στη `Object`)
Object obj1 = new Object();
Object obj2 = new Object();
boolean μεΑναφορά = obj1.equals(obj2); // false
// Σύγκριση με τιμή (μετά την επαναπροσδιορισμό του `equals`)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean μεΤιμή = myObj1.equals(myObj2); // true
Είναι επίσης σημαντικό να επαναπροσδιορίσετε τη μέθοδο hashCode() όταν επαναπροσδιορίζετε το equals(), ώστε να διατηρείτε το συμβόλαιό τους και να αποφεύγετε προβλήματα με συλλογές που βασίζονται σε κατακερματισμό, όπως το HashMap, το HashSet.