Sobes.tech
Junior

Ի՞նչ է անում equals() մեթոդը Java-ում։

sobes.tech AI

Պատասխան AI-ից

Java- ում equals() մեթոդը օգտագործվում է երկու օբյեկտների հավասարությունը համեմատելու համար: Դեպքում, երբ օբյեկտները ժառանգում են Object-ից առանց դրա վերագրումի, այն համեմատում է հղումները օբյեկտների վրա (==), այսինքն՝ ստուգում է, արդյոք փոփոխականները ցույց են տալիս նույն հիշողության հատվածին:

Սխալ equals() մեթոդի վերագրումը կարևոր է օբյեկտների համեմատության համար ըստ դրանց բովանդակության, ոչ թե ըստ դրանց գտնվելու վայրի հիշողության մեջ:

equals()-ի վերագրումիս, անհրաժեշտ է հետևել հետևյալ կանոններին:

  • Ինքնահամեմատություն: ցանկացած ոչ զրոյական x օբյեկտի համար, x.equals(x) պետք է վերադարձնի true:
  • Սիմետրիկություն: ցանկացած x և y ոչ զրոյական օբյեկտների համար, եթե x.equals(y) վերադարձնում է true, ապա նաև y.equals(x) պետք է վերադարձնի true:
  • Տրանզիտություն: ցանկացած x, y, և z ոչ զրոյական օբյեկտների համար, եթե x.equals(y) և y.equals(z) երկուսն էլ true են, ապա նաև x.equals(z) պետք է վերադարձնի true:
  • Կոնսիստենտություն: ցանկացած x և y ոչ զրոյական օբյեկտների համար, բազմակի կանչերը x.equals(y) պետք է կայունորեն վերադարձնեն նույն արդյունքը, եթե տվյալները, որոնք օգտագործվում են համեմատության համար, չեն փոխվել:
  • Null-ի նկատմամբ անհամապատասխանություն: ցանկացած x ոչ զրոյական, x.equals(null) պետք է վերադարձնի false:

Սովորաբար, equals()-ի վերագրումից հետո, անհրաժեշտ է նաև վերագրել hashCode() մեթոդը՝ պահպանելով պայմանը, որ եթե երկու օբյեկտները հավասար են equals()-ով, ապա նրանց hashCode()-ները պետք է լինեն նույնը: Հակառակ դեպքում, դա պարտադիր չէ:

Նմուշ՝ equals()-ի վերագրում:

public class MyObject {
    private int value;
    private String name;

    public MyObject(int value, String name) {
        this.value = value;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        // Համեմատություն
        if (this == o) return true;
        // Ստուգում null-ի և տիպի
        if (o == null || getClass() != o.getClass()) return false;
        // Տիպի փոխակերպում և համեմատություն ըստ դաշտերի
        MyObject myObject = (MyObject) o;
        return value == myObject.value &&
               Objects.equals(name, myObject.name);
    }

    @Override
    public int hashCode() {
        // Հաշվարկում hashCode ըստ դաշտերի
        return Objects.hash(value, name);
    }

    // getter-ներ, setter-ներ և այլն
}