Բանալին տարբերություն – հավասար է ընդդեմ հաշկոդի Java-ում
Հավասարը նման է==օպերատորին, որը պետք է փորձարկի օբյեկտի նույնականությունը, այլ ոչ թե օբյեկտի հավասարությունը: HashCode-ը մեթոդ է, որով դասը անուղղակիորեն կամ բացահայտորեն բաժանում է դասի օրինակում պահվող տվյալները մեկ հեշ արժեքի, որը 32 բիթ ստորագրված ամբողջ թիվ է: Java-ում հավասարների և hashCode-ի հիմնական տարբերությունն այն է, որ հավասարներն օգտագործվում են երկու օբյեկտ համեմատելու համար, մինչդեռ hashCode-ն օգտագործվում է հեշինգում որոշելու համար, թե օբյեկտը որ խմբին պետք է դասակարգել:
Ի՞նչ է հավասար Java-ում:
Հավասարության մեթոդն օգտագործվում է երկու օբյեկտ համեմատելու համար:Նախնական հավասարման մեթոդը սահմանվում է օբյեկտի դասում: Այդ իրականացումը նման է==օպերատորին: Երկու օբյեկտի հղումները հավասար են միայն այն դեպքում, եթե դրանք մատնանշում են նույն օբյեկտը: Հնարավոր է վերացնել հավասարումների մեթոդը:
Նկար 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); հայտարարությանը
Ուսանող դասարանում հավասարների մեթոդ չկա: Հետևաբար, Object դասի հավասարները կոչվում են: True-ն ցուցադրվում է միայն այն դեպքում, եթե օբյեկտի հղումը մատնանշում է նույն օբյեկտը:
Գծապատկեր 02. Ջավա ծրագիր՝ Overrided-ով հավասար է
Ըստ վերոնշյալ ծրագրի՝ հավասարեցման մեթոդը վերացված է։ Օբյեկտը փոխանցվում է մեթոդին և այն ձևակերպվում է Student-ին: Այնուհետև ստուգվում են id արժեքները: Եթե id արժեքները նման են, այն կվերադարձնի true: Եթե ոչ, այն կվերադառնա կեղծ: s1-ի և s2-ի ID-ները նման են: Այսպիսով, այն կտպվի ճշմարիտ: s1-ի և s3-ի ID-ները նույնպես նման են, ուստի այն կտպվի true:
Ի՞նչ է hashCode-ը Java-ում:
Հաշկոդն օգտագործվում է հեշինգում որոշելու համար, թե օբյեկտը որ խմբին պետք է դասակարգել: Օբյեկտների խումբը կարող է կիսել նույն հեշԿոդը: Ճիշտ հեշինգ ֆունկցիան կարող է հավասարաչափ բաշխել օբյեկտները տարբեր խմբերի:
Ճիշտ հեշԿոդը կարող է ունենալ հետևյալ հատկությունները. Ենթադրենք, որ կան երկու օբյեկտներ՝ obj1 և obj2: Եթե obj1.equals(obj2)-ը ճշմարիտ է, ապա obj1.hashCode()-ը հավասար է obj2.hashCode(): Եթե obj1.equals(obj2)-ը կեղծ է, ապա պարտադիր չէ, որ obj1.hashCode()-ը հավասար չէ obj2.hashCode(-ին): Երկու անհավասար օբյեկտները նույնպես կարող են ունենալ նույն հեշԿոդը։
Գծապատկեր 03. Ուսանողների դասարան հավասարներով և hashCode
Նկար 04. Հիմնական ծրագիր
Ուսանող դասը պարունակում է հավասարների և hashCode մեթոդները: Student դասի հավասար մեթոդը կստանա օբյեկտ: Եթե օբյեկտը null է, այն կվերադարձնի false:Եթե օբյեկտների դասերը նույնը չեն, այն կվերադարձնի false: id արժեքները ստուգվում են երկու օբյեկտներում: Եթե դրանք նման են, ապա այն կվերադառնա իրական: Հակառակ դեպքում այն կվերադարձնի կեղծ:
Հիմնական ծրագրում ստեղծվում են s1 և s2 օբյեկտները։ S1-ը կանչելիս.equals(s2)-ը կտա true, քանի որ հավասարների մեթոդը վերացված է և ստուգում է երկու օբյեկտների id արժեքները: Թեև դրանք վերաբերում են երկու օբյեկտի, պատասխանը ճշմարիտ է, քանի որ s1 և s2 id արժեքները նույնն են: Քանի որ s1.equals(s2)-ը ճշմարիտ է, s1-ի և s2-ի hashCode-ը պետք է հավասար լինի: s1-ի և s2-ի hashCode-ի տպումը տալիս է նույն արժեքը: HashCode մեթոդը կարող է օգտագործվել այնպիսի հավաքածուների հետ, ինչպիսին է HashMap-ը:
Ո՞րն է տարբերությունը հավասարների և hashCode-ի միջև Java-ում:
հավասար է ընդդեմ hashCode Java-ում |
|
equals-ը Java-ում մեթոդ է, որը գործում է նման==օպերատորի, որը պետք է փորձարկի օբյեկտի նույնականությունը, այլ ոչ թե օբյեկտի հավասարությունը: | hashCode-ը մեթոդ է, որով դասը անուղղակիորեն կամ բացահայտորեն բաժանում է դասի օրինակում պահվող տվյալները մեկ հեշ արժեքի: |
Օգտագործում | |
Հավասարության մեթոդն օգտագործվում է երկու օբյեկտ համեմատելու համար: | Մեթոդն օգտագործվում է հեշինգում որոշելու համար, թե որ խմբի մեջ պետք է տեղադրվի օբյեկտը: |
Ամփոփում – հավասար է ընդդեմ hashCode-ի Java-ում
Հավասարների և hashCode-ի տարբերությունը Java-ում այն է, որ հավասարներն օգտագործվում են երկու օբյեկտ համեմատելու համար, մինչդեռ hashCode-ն օգտագործվում է հեշինգում որոշելու համար, թե օբյեկտը որ խմբին պետք է դասակարգել: