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

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.