← Назад к вопросам

Что есть интересного у Object

1.0 Junior🔥 171 комментариев
#Soft Skills и карьера

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Интересные методы класса Object

Класс Object — это корневой класс в иерархии Java, от которого наследуют все остальные классы. Хотя это кажется простым, Object содержит несколько критически важных методов, которые часто недооценивают.

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

1. equals() и hashCode()

Это самые важные методы для сравнения объектов:

// По умолчанию equals сравнивает ссылки (как ==)
Object obj1 = new Object();
Object obj2 = new Object();
System.out.println(obj1.equals(obj2)); // false

// Переопределение для семантического сравнения
public class Person {
    private String name;
    private int age;
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Person person = (Person) obj;
        return age == person.age && name.equals(person.name);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

Критическое правило: если переопределяешь equals(), обязательно переопредели и hashCode()!

2. toString()

Определяет строковое представление объекта:

public class User {
    private int id;
    private String name;
    
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name=" + name +
                "}";
    }
}

User user = new User(1, "Alice");
System.out.println(user);

3. getClass()

Возвращает объект класса (тип) объекта:

String str = "Hello";
Class<?> clazz = str.getClass();
System.out.println(clazz.getName()); // java.lang.String
System.out.println(clazz.getSimpleName()); // String

if (obj instanceof String) {
    String s = (String) obj;
}

4. clone()

Создаёт поверхностную копию объекта:

public class Data implements Cloneable {
    public int value;
    
    @Override
    public Data clone() throws CloneNotSupportedException {
        return (Data) super.clone();
    }
}

Data original = new Data();
original.value = 42;
Data copy = original.clone();

5. wait(), notify(), notifyAll()

Механизм синхронизации потоков:

public class SharedBuffer {
    private int value;
    private boolean isEmpty = true;
    
    public synchronized void put(int val) throws InterruptedException {
        while (!isEmpty) {
            wait();
        }
        this.value = val;
        isEmpty = false;
        notifyAll();
    }
    
    public synchronized int get() throws InterruptedException {
        while (isEmpty) {
            wait();
        }
        isEmpty = true;
        notifyAll();
        return value;
    }
}

Эти методы позволяют потокам координироваться без активного ожидания.

Резюме

Методы Object — это фундамент Java. Понимание equals(), hashCode(), toString() и механизмов синхронизации критично для написания качественного кода.

Что есть интересного у Object | PrepBro