Sobes.tech
Junior

Методи equals() дар Java чӣ мекунад?

sobes.tech AI

Ҷавоб аз AI

Раванди equals() дар Java барои муқоиса кардани мазмуни ду объект истифода мешавад. Ба таври пешфарз, дар синфи Object, он истинодҳои объектҳоро муқоиса мекунад, яъне муайян мекунад, ки оё ду тағйирёбанда ба як объект дар хотира ишора мекунанд.

Аммо, бештар синфҳо дар Java (масалан, String, Integer) ин методро такмил медиҳанд, то арзишҳои дар объектҳо нигоҳ доштаашударо муқоиса кунанд, на истинодҳоро.

Ҳангоми такмил додани equals(), муҳим аст, ки шартномаи онро риоя кунед:

  • Рефлексивӣ: x.equals(x) бояд барои ҳар як x ки нол нест, true бошад.
  • Симметрӣ: 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 боИстинод = obj1.equals(obj2); // false

// муқоиса бо арзиш (пас аз такмил додани `equals`)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean боАрзиш = myObj1.equals(myObj2); // true

Ҳамчунин, муҳим аст, ки вақте equals() такмил дода мешавад, методи hashCode() низ такмил дода шавад, то шартномаи онҳоро нигоҳ дорад ва мушкилот бо коллекияҳое, ки асос ёфтаанд ба hashing, мисли HashMap, HashSet, пешгирӣ шавад.