Метод toString()
Як простіше вивести об'єкт?
Для відображення всіх даних об'єкта за допомогою команди System.out.println(object);
у Java існує метод toString();
.
toString()
Метод toString
у Java — це вбудований метод, який належить до класу Object
. Він використовується для повернення рядкового представлення об'єкта. За замовчуванням, коли ми викликаємо toString
для об'єкта, він повертає рядок, що містить назву класу та хеш-код об'єкта.
Розглянемо приклад:
Main.java
1234567891011121314151617181920package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } }
HashCode
Hashcode — це унікальний ідентифікатор для об'єкта, який зберігається в пам'яті. Ми також можемо переглянути хеш-код об'єкта, викликавши для нього метод hashCode()
, наприклад:
Main.java
123456789101112131415161718192021package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); int code = bob.hashCode(); System.out.println(code); } }
У такому випадку виникає питання: як отримати щось більш конкретне замість хеш-коду об'єкта? Для таких випадків ми можемо перевизначити метод toString()
.
Наслідування та перевизначення методів — це об'ємні теми, які ми розглянемо в окремому курсі. Наразі ми будемо використовувати перевизначення методу лише для методу toString()
.
Як використовувати toString()
Щоб перевизначити метод, потрібно використати наступний синтаксис:
Main.java
1234@Override public String toString() { // block of code }
Ми використовуємо анотацію @Override
перед цим методом. Завдяки цій анотації компілятор розпізнає, що ми перевизначаємо цей метод. Далі вказуємо синтаксис public String toString()
, що означає, який саме метод ми перевизначаємо.
У тілі цього методу ми визначаємо, як наш об'єкт має бути представлений у вигляді рядка. Перевизначимо метод для класу Person
:
Person.java
12345678910111213141516171819class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }
Команда System.lineSeparator()
використовується для створення нового рядка.
Ми визначили, як має виглядати наш об'єкт, шляхом конкатенації рядків із їхніми значеннями. Тому, коли ми намагаємося вивести об'єкт класу Person
, ми побачимо детальну інформацію про кожне поле.
Виведемо об'єкт за допомогою методу main
і подивимось, як це виглядає:
Main.java
12345678910111213141516171819202122232425262728package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }
Ми отримали інформацію про клас, до якого належить об'єкт bob
, а також деталі щодо всіх його полів.
Таким чином, ми можемо перевизначити та задати метод toString()
, щоб відображати потрібну інформацію під час виведення об'єкта. Створимо ще один об'єкт цього класу за допомогою конструктора, щоб побачити й закріпити, як метод toString()
трансформує об'єкт:
Main.java
123456789101112131415161718192021222324252627282930package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); Person alice = new Person("Alice", 17, "female"); System.out.println(alice); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "." + System.lineSeparator(); } }
Ми можемо побачити, що новий об'єкт alice
відображається в консолі за тим самим шаблоном.
Висновок
Використовуючи метод toString()
, ми значно спростили процес виведення інформації про об'єкт на екран, що дозволяє заощадити місце в основному методі.
1. Навіщо потрібен метод toString()
?
2. Яку анотацію слід використовувати над методом toString()
?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 2.63
Метод toString()
Свайпніть щоб показати меню
Як простіше вивести об'єкт?
Для відображення всіх даних об'єкта за допомогою команди System.out.println(object);
у Java існує метод toString();
.
toString()
Метод toString
у Java — це вбудований метод, який належить до класу Object
. Він використовується для повернення рядкового представлення об'єкта. За замовчуванням, коли ми викликаємо toString
для об'єкта, він повертає рядок, що містить назву класу та хеш-код об'єкта.
Розглянемо приклад:
Main.java
1234567891011121314151617181920package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } }
HashCode
Hashcode — це унікальний ідентифікатор для об'єкта, який зберігається в пам'яті. Ми також можемо переглянути хеш-код об'єкта, викликавши для нього метод hashCode()
, наприклад:
Main.java
123456789101112131415161718192021package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); int code = bob.hashCode(); System.out.println(code); } }
У такому випадку виникає питання: як отримати щось більш конкретне замість хеш-коду об'єкта? Для таких випадків ми можемо перевизначити метод toString()
.
Наслідування та перевизначення методів — це об'ємні теми, які ми розглянемо в окремому курсі. Наразі ми будемо використовувати перевизначення методу лише для методу toString()
.
Як використовувати toString()
Щоб перевизначити метод, потрібно використати наступний синтаксис:
Main.java
1234@Override public String toString() { // block of code }
Ми використовуємо анотацію @Override
перед цим методом. Завдяки цій анотації компілятор розпізнає, що ми перевизначаємо цей метод. Далі вказуємо синтаксис public String toString()
, що означає, який саме метод ми перевизначаємо.
У тілі цього методу ми визначаємо, як наш об'єкт має бути представлений у вигляді рядка. Перевизначимо метод для класу Person
:
Person.java
12345678910111213141516171819class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }
Команда System.lineSeparator()
використовується для створення нового рядка.
Ми визначили, як має виглядати наш об'єкт, шляхом конкатенації рядків із їхніми значеннями. Тому, коли ми намагаємося вивести об'єкт класу Person
, ми побачимо детальну інформацію про кожне поле.
Виведемо об'єкт за допомогою методу main
і подивимось, як це виглядає:
Main.java
12345678910111213141516171819202122232425262728package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }
Ми отримали інформацію про клас, до якого належить об'єкт bob
, а також деталі щодо всіх його полів.
Таким чином, ми можемо перевизначити та задати метод toString()
, щоб відображати потрібну інформацію під час виведення об'єкта. Створимо ще один об'єкт цього класу за допомогою конструктора, щоб побачити й закріпити, як метод toString()
трансформує об'єкт:
Main.java
123456789101112131415161718192021222324252627282930package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); Person alice = new Person("Alice", 17, "female"); System.out.println(alice); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "." + System.lineSeparator(); } }
Ми можемо побачити, що новий об'єкт alice
відображається в консолі за тим самим шаблоном.
Висновок
Використовуючи метод toString()
, ми значно спростили процес виведення інформації про об'єкт на екран, що дозволяє заощадити місце в основному методі.
1. Навіщо потрібен метод toString()
?
2. Яку анотацію слід використовувати над методом toString()
?
Дякуємо за ваш відгук!