Hola Pedro código revisado y todo bien, la pregunta también bien respondida.
si quito el .toString() sigue imprimiendo lo mismo por consola, ¿a que se debe?
Esto se debe a mecanismos automáticos incorporados en el compilador de Java. Cuando el compilador se encuentra un código como System.out.println(algo); trata de hacer las siguientes comprobaciones:
- Si algo es un String lo considera correcto y lo ejecuta
- Si algo no es un String trata de buscar su representación en forma de String, para ello automáticamente transforma la expresión en System.out.println(algo.toString()); que es como dentro de la convención de Java algo sería representado en forma de String. Si encuentra el método, ejecuta el método y muestra el String representación de algo.
- Si no logra con éxito nada de lo anterior lanza un error.
Por ello en el caso que comentas obtienes el mismo resultado si incluyes toString() que si no lo incluyes. En el caso de no incluirlo es el compilador Java quien lo hace
Saludos