Назови 3 любых метода, которые приходят от Object?

🔹 Вот три наиболее часто используемых метода из Object:

1. equals(Object obj)

Назначение: сравнивает текущий объект с другим на логическое равенство.

Сигнатура:

java
КопироватьРедактировать
public boolean equals(Object obj)

По умолчанию метод equals() сравнивает ссылки на объекты (т.е. ==).

Чтобы сравнивать содержимое объектов, метод обычно переопределяется.

Пример:

java
КопироватьРедактировать
String a = new String("hello");
String b = new String("hello");
System.out.println(a == b); // false  разные ссылки
System.out.println(a.equals(b)); // true  сравнение содержимого

Если вы пишете собственный класс и хотите, чтобы equals() корректно сравнивал содержимое, его нужно переопределить.

2. hashCode()

Назначение: возвращает целое число — хеш-код объекта, который используется, например, в HashMap, HashSet, Hashtable.

Сигнатура:

java
КопироватьРедактировать
public int hashCode()

Связан с equals(): если equals() говорит, что два объекта равны, то и их hashCode() должен быть одинаковым.

Важно: при переопределении equals() нужно всегда переопределять hashCode(), чтобы соблюсти контракт:

❗ Если a.equals(b) возвращает true, то a.hashCode() == b.hashCode() тоже должно быть true.

Пример:

java
КопироватьРедактировать
@Override
public int hashCode() {
return Objects.hash(name, age); // для объекта с полями name и age
}

3. toString()

Назначение: возвращает строковое представление объекта — чаще всего для вывода на экран или отладки.

Сигнатура:

java
КопироватьРедактировать
public String toString()

По умолчанию, возвращает строку вида:

swift
КопироватьРедактировать
ИмяКласса@ХешКодВ16-ричномВиде

Например:

java
КопироватьРедактировать
MyClass@7f31245a

Чтобы получить понятный вывод, метод toString() нужно переопределить.

Пример:

java
КопироватьРедактировать
@Override
public String toString() {
return "Person{name=" + name + ", age=" + age + "}";
}

📋 Все методы из Object (для справки):

Метод Назначение
equals(Object obj) Сравнение объектов
--- ---
hashCode() Хеш-код для объекта
--- ---
toString() Строковое представление
--- ---
getClass() Возвращает объект Class
--- ---
notify() Разблокирует один поток, ждущий на this
--- ---
notifyAll() Разблокирует все потоки, ждущие на this
--- ---
wait() Приостанавливает поток до вызова notify()
--- ---
wait(long timeout) Ждёт указанное время
--- ---
wait(long timeout, int nanos) Ждёт указанное время с точностью до наносекунд
--- ---
clone() Создаёт копию объекта (нужно реализовать Cloneable)
--- ---
finalize() Вызывается перед сборкой мусора (устарел с Java 9)
--- ---

📌 Пример класса с переопределёнными методами:

java
КопироватьРедактировать
public class Person {
private String name;
private int age;
// Конструктор, геттеры и сеттеры...
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof Person)) return false;
Person other = (Person) obj;
return age == other.age && name.equals(other.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public String toString() {
return "Person{name=" + name + ", age=" + age + "}";
}
}