▷ Aprende a utilizar el método toString() en Java

El método toString() en Java, como su propio nombre indica, se utiliza para convertir a String (es decir, a una cadena de texto) cualquier objeto Java. No obstante, hay varias cosas que tienes que tener en cuenta.

More...

¿Qué es el método toString() en Java?

Lo primero que tienes que saber es que el método toString() es un método de la clase Object. Como todos los objetos en Java heredan de dicha clase, todos ellos tienen acceso a este método. Siempre y cuando la referencia que utilices no apunte a null, llamar al método toString() va a compilar:

También hay otras maneras de llamar al método toString() de manera implícita. Por ejemplo, siempre que intentes imprimir o transformar a String un objeto, estarás utilizando el método toString():

Ten en cuenta que utilizar la llamada implícita (mediante String.valueOf() o System.out.println()) sigue precisando que la referencia esté inicializada, ya que, de lo contrario, verás el siguiente aviso de error:

Robot.java:9: error: variable droid might not have been initialized
System.out.println(droid);

¿Cuál es el output de toString()?

Me imagino que, a estas alturas, ya habrás probado a imprimir un objeto con el método toString() en Java. Habrás obtenido un resultado similar a este:

es.javautodidacta.OCP.Androide@6a6824be

El output del método toString(), por partes

En mi caso, he impreso un objeto de tipo Androide, que se encuentra en el paquete es.javautodidacta.OCP. Tomando este ejemplo como punto de partida, verás que el output del método toString() en Java se compone de tres partes:

  • En primer lugar, verás el nombre completo de la clase, es decir, con su nombre de paquete correspondiente.
  • A continuación, tienes una arroba.
  • Por último, verás una cifra en base hexadecimal (es decir, con números del 0 al 9 y las letras a, b, c, d, e, f). Este número es un código hash. El método que se utiliza para obtener este número, hashcode(), no entra en el examen de certificación. Digamos que se trata de un tipo de id, una cifra identificativa del objeto dado.

Este valor tan extraño que obtienes se debe a que la implementación predeterminada del método toString() en Java es la siguiente:

getClass().getName() + '@' + Integer.toHexString(hashCode())

Como puedes ver, este output predeterminado del método toString() te dice muy poco sobre el objeto en sí. Es por ello que algunos objetos prefieren sobreescribir este método, y utilizar su propia implementación.

Cómo imprimir el contenido de un array

Llegados a este punto, te quiero hablar sobre una de las cosas que te puede resultar un poco confusa a la hora de realizar el examen de certificación OCAJ8P. Se trata de lo que ocurre cuando quieres imprimir un array o un List.

El problema consiste en que para utilizar un array no necesitas importar nada. No obstante, no olvides que, si quieres imprimirla, sí tienes que importar algo más. Te lo muestro en el siguiente ejemplo:

Verás que el código compila sin problema y que, al ejecutarlo, obtienes lo siguiente (o algo similar):

[I@7960847b

Donde el corchete [ hace referencia a que se trata de un array y la I a que es un array de números enteros (int). Si, en lugar de int[] hubiese impreso un Integer[], habría obtenido un valor similar al siguiente:

[Ljava.lang.Integer;@7960847b

Como ves, aunque para utilizar un array no necesitas importar nada, para imprimirlo sí. Esto se debe a que un array tiene su propio método para imprimir los valores que contiene. Y ese método se encuentra en la clase Arrays, que, a su vez, está localizada en el paquete java.util.

En cambio, para utilizar un List<> necesitas ya importar la clase java.util, y para imprimirlo de manera correcta no necesitas hacer nada más.

Aprende a utilizar el método toString() en Java, y no olvides que, para imprimir el contenido de un array, debes importar la clase java.util.

Compartir

Cómo implementar tu propio método toString() en Java

Sobreescribir el método toString() es sencillo. Solo tienes que tener en cuenta que este método es, en primer lugar, público; en segundo lugar, que devuelve un String y, por último, que no acepta ningún parámetro.

Aquí tienes un ejemplo sencillo. Si instancias un objeto de la clase Robot y lo imprimes, verás la frase "Hola, soy un robot". ¿Has visto la anotación @Override? No es obligatoria (el código compila y se ejecuta sin inconveniente), pero sí recomendable. Eso sí: no la utilices si el método no está sobreescribiendo un método de la clase padre.

El problema de esta implementación tan sencilla es que n ote está diciendo nada del objeto en sí. En este caso, es cierto que el objeto en sí no posee ningún valor identificativo, así que vamos a hacer unos cambios. El objeto Robot que creamos contendrá los siguiente valores: 

Método toString() en Java, ejemplo

Qué cara de buena gente tiene

  • Un id, es decir, un número entre 0 y 49 que se generará al azar de manera automática.
  • Una fecha de fabricación, que tomará la fecha de hoy (si quieres aprender a operar con fechas, tengo un artículo sobre este tema). 
  • Un nombre, que asignaremos nosotros.

La clase quedará así:

Y este será el output de nuestra implementación del método toString():

Robot nº 15; creado el 22 de marzo de 2019, responde por Androide.

En este caso sí obtienes información concreta de este objeto concreto.

Conclusión

Como ves, el método toString() en Java no tiene mayor misterio. Como ejercicio, puedes sobreescribirlo en los objetos que crees, de manera que te familiarices con él. Y, muy importante, no olvides que, para imprimir el contenido de un array, tienes que importar la clase java.util. Este es ese tipo de trampas que te puedes encontrar en el examen de certificación. ¡El que avisa no es traidor! 🙂