Главная » Java » Класс Object

0

Все классы являются явными или неявными расширениями класса Object и, таким образом, наследуют его методы. Последние делятся на две категории: общие служебные и методы, поддерживающие  потоки. Работа с потоками рассматривается  в главе 9. В этом разделе описываются служебные методы Object и их назначение. К категории служебных относятся следующие методы:

public boolean equals(Object obj)

Сравнивает объект-получатель  с объектом, на который указывает ссылка obj; возвращает true, если объекты равны между собой, и false в противном случае. Если вам нужно выяснить, указывают ли две ссылки на один и тот же объект, можете сравнить их с помощью операторов == и !=, а метод equals предназначен для сравнения значений. Реализация метода equals, принятая в Object по умолчанию, предполагает, что объект равен лишь самому себе.

public int hashCode()

Возвращает хеш-код для данного объекта. Каждому объекту может быть присвоен некоторый хеш-код, используемый при работе с хеш-таблицами. По умолчанию возвращается значение, которое является уникальным для каждого объекта. Оно используется при сохранении объектов в таблицах Hashtable, которые описаны в разделе “Класс Hashtable”.

protected Object clone() throws CloneNotSupportedException

Возвращает дубликат объекта. Дубликатом называется новый объект, являющийся копией объекта, для которого вызывался метод clone. Процесс дублирования объектов подробнее рассматривается ниже в этой главе, в разделе 3.8.

public final Class getClass()

Возвращает объект типа Class, который соответствует классу данного объекта. Во время выполнения программы на Java можно получить информацию о классе в виде объекта Class, возвращаемого методом getClass.

protected void finalize() throws Throwable

Завершающие операции с объектом, осуществляемые  во время сборки мусора. Этот метод был подробно описан в разделе “Метод finalize”.

Методы hashCode и equals должны переопределяться,  если вы хотите ввести новую концепцию равенства объектов, отличающуюся от принятой в классе Object. По умолчанию считается, что два различных объекта не равны между собой, а их хеш-коды не должны совпадать.

Если ваш класс вводит концепцию равенства, при которой два различных объекта могут считаться равными, метод hashCode должен возвращать для них одинаковые значения хеш-кода. Это происходит оттого, что механизм Hashtable полагается в своей работе на возврат методом equals значения true при нахождении в хеш-таблице элемента с тем же значением. Например, класс String переопределяет метод equals так, чтобы он возвращал значение true при совпадении содержимого двух строк. Кроме того, в этом классе переопределяется  и метод hashCode — его новая версия возвращает хеш-код, вычисляемый на основании содержимого String, и две одинаковые строки имеют совпадающие значения хеш-кодов.

Упражнение 3.5

Переопределите  методы equals и hashCode в классе Vehicle.

Источник: Арнольд К., Гослинг Д. – Язык программирования Java (1997)

По теме:

  • Комментарии