ძირითადი განსხვავება – უდრის ჰეშკოდს ჯავაში
ტოლები მსგავსია==ოპერატორის, რომელიც უნდა შეამოწმოს ობიექტის იდენტურობა და არა ობიექტის თანასწორობა. HashCode არის მეთოდი, რომლითაც კლასი ირიბად ან აშკარად არღვევს კლასის ინსტანციაში შენახულ მონაცემებს ერთ ჰეშ მნიშვნელობად, რომელიც არის 32 ბიტიანი ხელმოწერილი მთელი რიცხვი. ჯავაში ტოლებსა და ჰეშკოდს შორის მთავარი განსხვავება ისაა, რომ ტოლები გამოიყენება ორი ობიექტის შესადარებლად, ხოლო ჰეშკოდი გამოიყენება ჰეშინგში, რათა გადაწყვიტოს რომელ ჯგუფში უნდა დაიყოს ობიექტი.
რის ტოლია ჯავაში?
ტოლების მეთოდი გამოიყენება ორი ობიექტის შესადარებლად.ნაგულისხმევი ტოლების მეთოდი განისაზღვრება ობიექტის კლასში. ეს განხორციელება მსგავსია==ოპერატორის. ორი ობიექტის მითითება ტოლია მხოლოდ იმ შემთხვევაში, თუ ისინი მიუთითებენ იმავე ობიექტზე. შესაძლებელია ტოლობის მეთოდის უგულებელყოფა.
სურათი 01: Java პროგრამა უდრის
დებულება System.out.println(s1.equals(s2)) მოგცემთ პასუხს მცდარი, რადგან s1 და s2 მიუთითებს ორ განსხვავებულ ობიექტზე. ეს იყო განაცხადის მსგავსი, System.out.println(s1==s2);
დებულება System.out.println(s1.equals(s3)) პასუხს გასცემს ჭეშმარიტს, რადგან s1 და s3 მიუთითებს ერთსა და იმავე ობიექტზე. ეს იყო განაცხადის მსგავსი, System.out.println(s1==s3);
სტუდენტის კლასში არ არსებობს ტოლების მეთოდი. ამიტომ, ობიექტის კლასში ტოლები ეწოდება. True ნაჩვენებია მხოლოდ იმ შემთხვევაში, თუ ობიექტის მითითება მიუთითებს იმავე ობიექტზე.
სურათი 02: Java პროგრამა Overridden-ით უდრის
ზემოაღნიშნული პროგრამის მიხედვით, ტოლების მეთოდი გადაფარებულია. ობიექტი გადაეცემა მეთოდს და ის ტიპი გადაცემულია Student-ზე. შემდეგ მოწმდება id მნიშვნელობები. თუ id მნიშვნელობები მსგავსია, ის დაბრუნდება true. თუ არა, ის დაბრუნდება ყალბი. s1-ისა და s2-ის ID-ები მსგავსია. ასე რომ, ის დაიბეჭდება ჭეშმარიტი. s1-ისა და s3-ის ID-ები ასევე მსგავსია, ასე რომ, ის იბეჭდება true.
რა არის ჰეშკოდი ჯავაში?
ჰეშკოდი გამოიყენება ჰეშინგში, რათა გადაწყვიტოს რომელ ჯგუფში უნდა დაიყოს ობიექტი. ობიექტების ჯგუფს შეუძლია ერთი და იგივე ჰეშკოდის გაზიარება. სწორ ჰეშინგ ფუნქციას შეუძლია ობიექტების თანაბრად განაწილება სხვადასხვა ჯგუფად.
სწორ ჰეშკოდს შეიძლება ჰქონდეს შემდეგი თვისებები.დავუშვათ, რომ არსებობს ორი ობიექტი, როგორც obj1 და obj2. თუ obj1.equals(obj2) მართალია, მაშინ obj1.hashCode() უდრის obj2.hashCode(). თუ obj1.equals(obj2) მცდარია, არ არის აუცილებელი, რომ obj1.hashCode() არ იყოს ტოლი obj2.hashCode(). ორ არათანაბარ ობიექტს შეიძლება ჰქონდეს იგივე ჰეშკოდი.
სურათი 03: სტუდენტური კლასი ტოლებით და ჰეშკოდით
სურათი 04: მთავარი პროგრამა
Student კლასი შეიცავს ტოლების და hashCode მეთოდებს. Equals მეთოდი Student კლასში მიიღებს ობიექტს. თუ ობიექტი ნულოვანია, ის დაბრუნდება false-ზე.თუ ობიექტების კლასები არ არის იგივე, ის დაბრუნდება false. id მნიშვნელობები შემოწმებულია ორივე ობიექტში. თუ ისინი მსგავსია, ის დაბრუნდება ჭეშმარიტად. წინააღმდეგ შემთხვევაში ის დაბრუნდება false.
მთავარ პროგრამაში იქმნება ობიექტები s1 და s2. s1-ის გამოძახებისას.equals(s2) მისცემს true-ს, რადგან ტოლების მეთოდი გადაფარებულია და ის ამოწმებს ორი ობიექტის id მნიშვნელობებს. მიუხედავად იმისა, რომ ისინი გულისხმობენ ორ ობიექტს, პასუხი მართალია, რადგან s1 და s2-ის id მნიშვნელობები იგივეა. რადგან s1.equals(s2) მართალია, s1 და s2-ის ჰეშკოდი ტოლი უნდა იყოს. s1-ისა და s2-ის ჰეშკოდის დაბეჭდვა იძლევა იგივე მნიშვნელობას. hashCode მეთოდის გამოყენება შესაძლებელია კოლექციებთან, როგორიცაა HashMap.
რა განსხვავებაა ტოლებსა და ჰეშკოდს შორის ჯავაში?
უდრის ჰეშკოდს ჯავაში |
|
equals არის მეთოდი Java-ში, რომელიც მოქმედებს==ოპერატორის მსგავსად, რომელიც უნდა შეამოწმოს ობიექტის იდენტურობა და არა ობიექტის თანასწორობა. | hashCode არის მეთოდი, რომლითაც კლასი ირიბად ან აშკარად ანაწილებს კლასის ეგზემპლარში შენახულ მონაცემებს ერთ ჰეშ მნიშვნელობად. |
გამოყენება | |
მეთოდი ტოლია გამოიყენება ორი ობიექტის შესადარებლად. | მეთოდი გამოიყენება ჰეშინგში, რათა გადაწყვიტოს რომელ ჯგუფში უნდა განთავსდეს ობიექტი. |
რეზიუმე – უდრის ჰეშკოდს ჯავაში
სხვაობა ტოლებსა და ჰეშკოდში ჯავაში არის ის, რომ ტოლები გამოიყენება ორი ობიექტის შესადარებლად, ხოლო ჰეშკოდი გამოიყენება ჰეშინგში, რათა გადაწყვიტოს რომელ ჯგუფში უნდა დაიყოს ობიექტი.