Sobes.tech
Junior

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

sobes.tech AI

Ҷавоб аз AI

Метод equals() дар Java истифода мешавад барои муқоиса кардани ду объект ба баробарӣ. Дар ҳолати пешфарзӣ, дар сурате ки объектҳо аз 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) бояд устуворона натиҷаи якхеларо баргардонад, агар маълумотҳое, ки барои муқоиса истифода мешаванд, дар ду объект тағир наёфта бошанд.
  • Барои ҳар як объекти нулусоз 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);
    }

    // геттерҳо, сеттерҳо ва ғайра
}