Методи 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);
}
// геттерҳо, сеттерҳо ва ғайра
}