Sobes.tech
Junior

Какво знаеш за класа Object?

sobes.tech AI

Отговор от 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, като сравнение, хеширане, синхронизация на нишки и получаване на информация за класа.