El método toString() es un método estándar de la clase Object en Java, que permite obtener una representación en forma de cadena de un objeto. Históricamente, se introdujo para ayudar en la depuración y el registro, para que, en lugar de mostrar información técnica sobre el objeto (ClassName@hashCode), se pudiera obtener una descripción significativa y legible.
Inicialmente, si no se sobrescribe toString(), el método devuelve una cadena del tipo nombre_clase@hashCode. Esto es inconveniente para entender o mostrar el estado del objeto. Por lo tanto, sobrescribir toString() se ha convertido en una buena práctica.
Sin una implementación explícita de toString(), la depuración y el registro de objetos se complican. Es difícil entender qué contiene el objeto si no se conoce su estructura interna o los valores actuales de los campos.
La sobrescritura correcta de toString() permite:
Ejemplo de código:
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } }
Características clave:
¿Es obligatorio sobrescribir siempre el método toString() en todas las clases?
No, no es obligatorio, pero es muy recomendable sobrescribirlo en clases cuyos objetos se muestran a menudo en los registros o se utilizan para depuración.
¿Puede el método toString() lanzar excepciones?
Técnicamente, sí, si dentro del método ocurre, por ejemplo, un NullPointerException al acceder a un campo sin verificar si es null. Pero es una buena práctica evitar esto, de modo que toString() siempre devuelva una cadena correcta.
¿Es obligatoria la llamada a toString()?
No, el compilador lo llama implícitamente al concatenar un objeto con una cadena o al imprimir un objeto con System.out.println.
Person p = new Person("Ivan", 25); System.out.println(p); // Llamará a p.toString() automáticamente
Un programador no sobrescribe toString() en la clase User y registra:
log.info(user);
Ventajas:
Desventajas:
User@1a2b3c, sin información sobre el usuario.Un programador sobrescribe toString():
@Override public String toString() { return "User{name='" + name + "', id=" + id + "}"; }
Ventajas:
Desventajas: