Sobes.tech
Junior

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

sobes.tech AI

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

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

Այնուամենայնիվ, Java- ի մեծամասնության դասերը (օրինակ՝ String, Integer) վերագրում են այս մեթոդը, որպեսզի համեմատեն օբյեկտներում պարունակվող արժեքները, այլ ոչ թե նրանց հղումները:

Երբ վերագրում եք equals()-ը, կարևոր է պահպանել նրա պայմանները:

  • Ռեֆլեկտիվություն: x.equals(x) պետք է լինի true ցանկացած ոչ-զրո x-ի համար:
  • Սիմետրիկություն: x.equals(y) պետք է լինի true միայն այն դեպքում, երբ y.equals(x)-ը նույնպես true է, ցանկացած ոչ-զրո x և y համար:
  • Տրանզիտիվություն: Եթե x.equals(y) և y.equals(z)true են, ապա x.equals(z)-ը նույնպես պետք է լինի true ցանկացած ոչ-զրո x, y և z համար:
  • Կոնսիստենտություն: Կրկնվող x.equals(y) կանչերը պետք է վերադարձնեն նույն արդյունքը, եթե օբյեկտները չեն փոխվել:
  • **Ոչ-զրո x-ի համար, 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 byReference = obj1.equals(obj2); // false

// արժեքի համեմատություն (վերագրած `equals`-ով)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean byValue = myObj1.equals(myObj2); // true

Կարևոր է նաև վերագրել hashCode() մեթոդը equals()-ի հետ, որպեսզի պահպանվի նրանց պայմանը և խուսափել խնդիրներից, որոնք առաջանում են հեշավորման (օրինակ՝ HashMap, HashSet) օգտագործման ժամանակ։