2075 / Java / Класи / Перевантаження операторів
Integer та String перевантажують equals для порівняння не адрес, а значень
public boolean equals(Object obj) { // однакові адреси if (obj == this) { return true; } // перевірка на null if (obj == null) { return false; } // чи об'єкти одного типу if (obj.getClass() != this.getClass()) { return false; } // створюємо наш об'єкт Person guest = (Person) obj; // для рядків додаткова перевірка if (firstName == guest.firstName || (firstName != null && firstName.equals(guest.firstName)) ) { return ture; } else { return false; } }
Правила Рефлексивність: Об'єкт повинен дорівнювати собі самому Симетричність: a.equals(b) = true => b.equals(a) = true Транзитивність: a.equals(b) = true, b.equals(c) = true => c.equals(a) = true Узгодженість: повторний виклик методу equals() повинен повертати одне і теж значення до тих пір, поки будь-яке значення властивостей об'єкта не буде змінено. Тобто, якщо два об'єкта рівні в Java, то вони будуть рівні поки їх властивості залишаються незмінними. Порівняння null: об'єкт повинен бути перевірений на null. Якщо об'єкт дорівнює null, то метод повинен повернути false, а не NullPointerException.