Βασική διαφορά – ισούται με hashCode στην Java
Το ίσο είναι παρόμοιο με τον τελεστή==, ο οποίος πρόκειται να ελέγξει την ταυτότητα του αντικειμένου αντί για την ισότητα του αντικειμένου. Ο hashCode είναι μια μέθοδος με την οποία μια κλάση αναλύει έμμεσα ή ρητά τα δεδομένα που είναι αποθηκευμένα σε μια παρουσία της κλάσης σε μια ενιαία τιμή κατακερματισμού, η οποία είναι ένας ακέραιος αριθμός 32 bit. Η βασική διαφορά μεταξύ του ίσου και του hashCode στην Java είναι ότι το ίσο χρησιμοποιείται για τη σύγκριση δύο αντικειμένων ενώ το hashCode χρησιμοποιείται στον κατακερματισμό για να αποφασίσει σε ποια ομάδα πρέπει να κατηγοριοποιηθεί ένα αντικείμενο.
Τι ισούται στην Java;
Η μέθοδος ίσον χρησιμοποιείται για τη σύγκριση δύο αντικειμένων. Η προεπιλεγμένη μέθοδος ίσον ορίζεται στην κλάση αντικειμένου. Αυτή η υλοποίηση είναι παρόμοια με τον τελεστή==. Οι δύο αναφορές αντικειμένων είναι ίσες μόνο αν δείχνουν προς το ίδιο αντικείμενο. Είναι δυνατή η παράκαμψη της μεθόδου ισοδυναμίας.
Εικόνα 01: Πρόγραμμα Java ισούται με
Η πρόταση System.out.println(s1.equals(s2)) θα δώσει την απάντηση false επειδή τα s1 και s2 αναφέρονται σε δύο διαφορετικά αντικείμενα. Ήταν παρόμοια με τη δήλωση System.out.println(s1==s2);
Η πρόταση System.out.println(s1.equals(s3)) θα δώσει την απάντηση αληθής επειδή τα s1 και s3 αναφέρονται στο ίδιο αντικείμενο. Ήταν παρόμοια με τη δήλωση System.out.println(s1==s3);
Δεν υπάρχει μέθοδος ίσων στην τάξη Student. Επομένως, τα ίσα στην κλάση Object καλούνται. Το True εμφανίζεται μόνο εάν η αναφορά αντικειμένου δείχνει στο ίδιο αντικείμενο.
Εικόνα 02: Πρόγραμμα Java με παράκαμψη ισούται με
Σύμφωνα με το παραπάνω πρόγραμμα, η μέθοδος ίσον παρακάμπτεται. Ένα αντικείμενο μεταβιβάζεται στη μέθοδο και μεταδίδεται στον τύπο Student. Στη συνέχεια, ελέγχονται οι τιμές αναγνωριστικού. Εάν οι τιμές αναγνωριστικού είναι παρόμοιες, θα επιστρέψει true. Αν όχι, θα επιστρέψει ψευδής. Τα αναγνωριστικά των s1 και s2 είναι παρόμοια. Έτσι, θα εκτυπωθεί αληθινό. Τα αναγνωριστικά των s1 και s3 είναι επίσης παρόμοια, επομένως θα εκτυπωθούν true.
Τι είναι το hashCode στην Java;
Ο κατακερματισμός χρησιμοποιείται στον κατακερματισμό για να αποφασίσει σε ποια ομάδα πρέπει να κατηγοριοποιηθεί ένα αντικείμενο. Μια ομάδα αντικειμένων μπορεί να μοιράζεται τον ίδιο hashCode. Μια σωστή συνάρτηση κατακερματισμού μπορεί να κατανείμει ομοιόμορφα αντικείμενα σε διαφορετικές ομάδες.
Ένας σωστός hashCode μπορεί να έχει ιδιότητες ως εξής. Ας υποθέσουμε ότι υπάρχουν δύο αντικείμενα ως obj1 και obj2. Εάν το obj1.equals(obj2) είναι αληθές, τότε το obj1.hashCode() είναι ίσο με το obj2.hashCode(). Εάν το obj1.equals(obj2) είναι false, δεν είναι απαραίτητο η obj1.hashCode() να μην είναι ίση με την obj2.hashCode(). Τα δύο άνισα αντικείμενα μπορεί επίσης να έχουν τον ίδιο hashCode.
Εικόνα 03: Μαθητική τάξη με ίσα και hashCode
Εικόνα 04: Κύριο πρόγραμμα
Η τάξη Student περιέχει τις μεθόδους ισολογισμού και hashCode. Η μέθοδος ίσον στην τάξη Student θα λάβει ένα αντικείμενο. Εάν το αντικείμενο είναι μηδενικό, θα επιστρέψει ψευδές. Εάν οι κλάσεις των αντικειμένων δεν είναι ίδιες, θα επιστρέψει false. Οι τιμές id ελέγχονται και στα δύο αντικείμενα. Εάν είναι παρόμοια, θα επιστρέψει αληθινό. Διαφορετικά θα επιστρέψει false.
Στο κύριο πρόγραμμα δημιουργούνται τα αντικείμενα s1 και s2. Κατά την κλήση του s1.equals(s2) θα δώσει true, επειδή η μέθοδος equals παρακάμπτεται και ελέγχει τις τιμές id των δύο αντικειμένων. Παρόλο που αναφέρονται σε δύο αντικείμενα, η απάντηση είναι αληθής επειδή οι τιμές id του s1 και του s2 είναι ίδιες. Καθώς το s1.equals(s2) είναι αληθές, ο hashCode των s1 και s2 θα πρέπει να είναι ίσος. Η εκτύπωση του hashCode των s1 και s2 δίνει την ίδια τιμή. Η μέθοδος hashCode μπορεί να χρησιμοποιηθεί με Συλλογές όπως το HashMap.
Ποια είναι η διαφορά μεταξύ ίσων και hashCode στην Java;
ισούται με hashCode στην Java |
|
Το equals είναι μια μέθοδος στην Java που δρα παρόμοια με τον τελεστή==, ο οποίος πρόκειται να ελέγξει για ταυτότητα αντικειμένου αντί για ισότητα αντικειμένου. | Το hashCode είναι μια μέθοδος με την οποία μια κλάση αναλύει έμμεσα ή ρητά τα δεδομένα που είναι αποθηκευμένα σε μια παρουσία της κλάσης σε μια ενιαία τιμή κατακερματισμού. |
Χρήση | |
Η μέθοδος ίσον χρησιμοποιείται για τη σύγκριση δύο αντικειμένων. | Η μέθοδος χρησιμοποιείται στον κατακερματισμό για να αποφασίσει σε ποια ομάδα θα τοποθετηθεί ένα αντικείμενο. |
Σύνοψη – ισούται με hashCode στην Java
Η διαφορά στο ίσο και το hashCode στην Java είναι ότι το ίσο χρησιμοποιείται για τη σύγκριση δύο αντικειμένων ενώ το hashCode χρησιμοποιείται στον κατακερματισμό για να αποφασίσει σε ποια ομάδα πρέπει να κατηγοριοποιηθεί ένα αντικείμενο.