Назад к вопросам
Junior
69
questionbank

Что ты знаешь о классе Object?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

java.lang.Object является корневым классом в иерархии классов Java. Каждый класс неявно наследуется от Object.

Основные методы:

  • equals(Object obj): Сравнивает текущий объект с другим объектом на равенство. По умолчанию сравнивает ссылки.
  • hashCode(): Возвращает хеш-код объекта. Используется в коллекциях, основанных на хеш-таблицах (например, HashMap, HashSet). Если два объекта равны по equals(), их hashCode() должны быть одинаковы.
  • toString(): Возвращает строковое представление объекта. По умолчанию возвращает имя класса + @ + хеш-код в шестнадцатеричном формате. Чаще всего переопределяется для предоставления более информативного представления.
  • getClass(): Возвращает объект Class, представляющий класс объекта во время выполнения.
  • notify(): Возобновляет выполнение одного потока, ожидающего на мониторе этого объекта.
  • notifyAll(): Возобновляет выполнение всех потоков, ожидающих на мониторе этого объекта.
  • wait() / wait(long timeout) / wait(long timeout, int nanos): Заставляет текущий поток ожидать до тех пор, пока другой поток не вызовет методы notify() или notifyAll() для этого объекта или не истечет указанное время. Вызывается только из синхронизированных блоков или методов.
  • clone(): Создает и возвращает копию этого объекта. Требует реализации интерфейса Cloneable.
  • finalize(): Вызывается сборщиком мусора перед удалением объекта. Не рекомендуется к использованию из-за непредсказуемости выполнения.

Пример переопределения equals() и hashCode():

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
               Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "Person{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
    }
}

Класс Object обеспечивает фундаментальные механизмы, необходимые для работы объектов в Java, такие как сравнение, хеширование, синхронизация потоков и получение информации о классе.