Назови 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 + "}";
}
}