JavaRush /Курсы /Java Multithreading /Все методы класса Object, метод toString()

Все методы класса Object, метод toString()

Java Multithreading
1 уровень , 3 лекция
Открыта
Все методы класса Object, метод toString() - 1

— Привет, Амиго!

— Привет!

— Сегодня мы будем изучать класс Object.
Ты уже сталкивался с ним, и знаешь, что Object – базовый класс для всех классов. У него практически нет никаких данных, но есть несколько методов.

— А зачем ему методы? Разве кто-то создает его объекты?

— Посмотри на ситуацию с такой стороны – методы, которые есть у Object’а, есть вообще у всех классов. Т.е. разработчики Java отобрали несколько методов, которые, по их мнению, должны быть у всех классов и добавили их в класс Object.

А в сочетании с полиморфизмом – возможностью переопределять методы класса Object в классах-наследниках – это порождает очень мощный инструмент.

Давай посмотрим, что же это за методы:

Метод Описание
public String toString()
Возвращает строковое представление объекта.
public native int hashCode()
public boolean equals(Object obj)
Пара методов, которые используются для сравнения объектов.
public final native Class getClass()
Возвращает специальный объект, который описывает текущий класс.
public final native void notify()
public final native void notifyAll()
public final native void wait(long timeout) 
public final void wait(long timeout, intnanos) 
public final void wait()
Методы для контроля доступа к объекту из различных нитей. Управление синхронизацией нитей.
protected void finalize()
Метод позволяет «освободить» родные не-Java ресурсы: закрыть файлы, потоки и т.д.
protected native Object clone()
Метод позволяет клонировать объект: создает дубликат объекта.

Методы можно разбить на 6 групп. С некоторыми ты уже знаком, а с остальными мы познакомимся в ближайших лекциях.

— Что-то не вижу тут ничего полезного.

— Амиго! Если бы эти методы были не важны, их бы не добавили абсолютно всем объектам! Так что советую тебе более внимательно разобраться – что это такое и зачем они нужны. Если тебе кажется, что они не важны, значит, ты что-то не понял или понял не правильно.

— Ок. Я буду внимательно слушать.

— Начнем с метода toString();

Этот метод позволяет получить текстовое описание любого объекта. Реализация его в классе Object очень простая:

return getClass().getName() + "@" + Integer.toHexString(hashCode());

getClass() и hashCode() – это тоже методы класса Object.
Вот стандартный результат вызова такого метода

java.lang.Object@12F456

— И в чем же польза такого описания?

— Из такого описания можно узнать класс объекта, у которого вызвали данный метод. А также можно различать объекты – разным объектам соответствуют разные цифры, идущие после символа @.

Но ценность данного метода в другом. Данный метод можно переопределить в любом классе и возвращать более нужное или более детальное описание объекта.

Но и это еще не все. Благодаря тому, что для каждого объекта можно получить его текстовое представление, в Java можно было реализовать поддержку «сложения» строк с объектами.
Вот смотри:

Код Что происходит на самом деле
int age = 18;
System.out.println("Age is " + age);

String s = String.valueOf(18);
String result = "Age is " + s;
System.out.println(result);
Student st = new Student("Vasya");
System.out.println("Student is " + st);

Student st = new Student("Vasya");
String result = "Student is " + st.toString();
System.out.println(result);
Car car = new Porsche();
System.out.println("My car is " + car);

Car car = new Porsche();
String result = "My car is " + car.toString();
System.out.println(result);

— Да, я постоянно этим пользуюсь. Особенно когда пишу программу или ищу в ней ошибки. Полезный метод

Комментарии (110)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anonymous #3585174 Уровень 33
22 сентября 2025
Like
No Name Уровень 36
16 ноября 2024
+лекция в копилке
6 сентября 2024
native - значит метод написан не на Java (C, C++)
Anastasia Уровень 51
11 июня 2024
Вот попроще обьяснение, кому надо - `equals()` - проверяет обьекты на равенство по ссылке - `hashCode()` - проверяет обьекты на равенство по хеш коду - `toString()` - превращает обьект в строку - `getClass()` - возвращает метаданные обьекта - `notify()` - пробуждает 1 поток - `notifyAll()` - пробуждает все потоки - `wait()` - переводит поток в состояние ожидания - `wait(long timeOut)` - переводит поток в состояние ожидания на указанное время - `wait(long timeOut, int nanos)` - переводит поток в состояние ожидания на указанное время - finalize(); - принудительно очищает ресурсы. Устаревший, не рекомендуется использовать. Вместо него стоит использовать `AutoClosable.close()` или `Closable.close()` - clone() - создает копию обьекта
Anonymous #2444676 Уровень 19
12 июня 2024
`equals()`проверяет содержимое, а не ссылки, так как ссылки проверяются ==
Solaire Уровень 42
24 июня 2024
В реализации класса Object метод equals() сравнивает именно ссылки текущего и переданного объектов, equals() может проверять содержимое исходя из нашей реализации или реализации других классов, например, String. Поэтому он прав.
Mikhail Tabakaev Уровень 31
4 октября 2024
- hashCode() - возвращает хеш-код объекта; - toString() - НЕ превращает объект в строку, а именно ВОЗВРАЩАЕТ СТРОКОВОЕ ПРЕДСТАВЛЕНИЕ объекта!!! например, у пользовательского класса можно переопределить этот метод, наследованный из класса Object, и, тем, самым мы ВЫБОРОЧНО добавим только интересующие нас параметры (свойства / поля и т.д.) объекта класса, т.е. мы можем вывести на печать не все, а именно те поля, которые нам на самом деле интересны! - clone() - не создает копию (и не создает новую ссылку на существующий объект), а именно КЛОНИРУЕТ объект. копия и клон объекта - это разные вещи!!!
Максим Li Уровень 40
12 мая 2024
12.05.2024
Anonymous #3390940 Уровень 38
15 февраля 2024
🦝
Dmitry Shaburov Уровень 33
22 ноября 2023
22.11.2023
Nikita Уровень 35
17 ноября 2023
17/11/2023
Ислам Уровень 33
19 июля 2023
Nice
Анна Уровень 34
1 июля 2023
Мне так нравится, и это все в курсе про многопоточность, а то, что действительно нужно, где-то там в "жопе мира", через тернии к звездам прям.
LukasKeyn Уровень 37
24 июля 2023
на самом деле это вопросы к собеседованию уже.
Gans Electro Уровень 41
14 августа 2023
Все темы так или иначе будут нужны в уровнях выше, в потоках тоже. Тот же анонимный класс например, часто поток создается так. Статусы потоков это Enum и т.д. Конечно можно сказать что это как сову на глобус но все же