Перевантаження операторів

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.