Sobes.tech
Junior

Javaда equals() ыкмасы эмне кылат?

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() ыкмасы да бирдей болушу керек. Эскерсе, бул милдеттүү эмес:

Коддун мисалы:

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() {
        // Хеш-кодду талааларга негизделип түзүү
        return Objects.hash(value, name);
    }

    // геттерлер, сеттерлер жана башка
}