Перевантаження операторів
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.