toString () возвращает строковое / текстовое представление объекта. Обычно используется для диагностических целей, таких как отладка, ведение журнала и т. Д. Метод toString () используется для чтения значимых деталей объекта.
Он автоматически вызывается, когда объект передается println, print, printf, String.format (), assert или оператор конкатенации строк.
Реализация toString () по умолчанию в классе Object возвращает строку, состоящую из имени класса этого объекта, за которым следует знак @ и шестнадцатеричное представление без знака хэш-кода этого объекта, используя следующую логику,
getClass().getName() + "@" + Integer.toHexString(hashCode())
Например, следующий
public final class Coordinates {
private final double x;
private final double y;
public Coordinates(double x, double y) {
this.x = x;
this.y = y;
}
public static void main(String[] args) {
Coordinates coordinates = new Coordinates(1, 2);
System.out.println("Bourne's current location - " + coordinates);
}
}
печатает
Bourne's current location - Coordinates@addbf1 //concise, but not really useful to the reader
Теперь, переопределяя toString () в классе Coordinates, как показано ниже,
@Override
public String toString() {
return "(" + x + ", " + y + ")";
}
приводит к
Bourne's current location - (1.0, 2.0) //concise and informative
. Полезность переопределения toString () становится еще больше, когда метод вызывается в коллекциях содержащие ссылки на эти объекты. Например, следующий
public static void main(String[] args) {
Coordinates bourneLocation = new Coordinates(90, 0);
Coordinates bondLocation = new Coordinates(45, 90);
Map locations = new HashMap();
locations.put("Jason Bourne", bourneLocation);
locations.put("James Bond", bondLocation);
System.out.println(locations);
}
вместо
печатает
{James Bond=(45.0, 90.0), Jason Bourne=(90.0, 0.0)}
,
{James Bond=Coordinates@addbf1, Jason Bourne=Coordinates@42e816}
Несколько указателей реализации,
public double getX() {
return x;
}
public double getY() {
return y;
}
Полный охват метода toString () приведен в 10-м номере книги «Эффективное Java ™, второе издание» Джоша Блоха.