How an object will call toString method implicitly?

You’re not explicitly calling toString(), but implicitly you are:

See:

System.out.println(foo); // foo is a non primitive variable

System is a class, with a static field out, of type PrintStream. So you’re calling the println(Object) method of a PrintStream.

It is implemented like this:

   public void println(Object x) {
       String s = String.valueOf(x);
       synchronized (this) {
           print(s);
           newLine();
       }
   }

As we see, it’s calling the String.valueOf(Object) method.
This is implemented as follows:

   public static String valueOf(Object obj) {
       return (obj == null) ? "null" : obj.toString();
   }

And here you see, that toString() is called.

Leave a Comment