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:
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.
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:
Qué cara de buena gente tiene
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! 🙂