Головна‎ > ‎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.