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.