Re: enumerate the consumers of foo.toString() within an application
Bill Butler wrote:
"Eric Sosman" <esosman@ieee-dot-org.invalid> wrote in message
news:drGdnfFWZcvgw5fVnZ2dnUVZ_rSrnZ2d@comcast.com...
Roedy Green wrote:
On 19 Apr 2008 19:47:47 GMT, ram@zedat.fu-berlin.de (Stefan Ram)
wrote, quoted or indirectly quoted someone who said :
?toString()? is not special compared to any other method.
Except that Sun code will call toString under a number of
circumstances. In that sense it is magic.
Could you elaborate? Off-hand, I can't think of any
circumstances where the compiler fabricates a toString()
call out of thin air. Something to do with Enum, maybe?
System.out.println(foo); // this calls foo.toString() to get a String
from an object
But the toString() call is not magically generated by the
compiler at all. The compiler generates a call to the
PrintStream.println(Object) method, which in turn makes a
perfectly normal call to String.valueOf(Object), which in
its turn calls toString() on foo's class. No magic, just
explicit calls to perfectly ordinary methods.
However, I've thought of one sense in which toString() may
be thought of as magical: String concatenation. In
String s = myDog + " is bigger than " + yourDog;
the compiler "magically" calls toString() on the StringBuilder
object that actually performs the concatenation. Note that it
does not call myDog.toString() nor yourDog.toString(); rather,
it calls StringBuilder.append(xxxDog), which eventually gets
around to calling xxxDog.toString().
Still, it might be considered magical that the compiler
knows StringBuilder.toString() is useful.
--
Eric Sosman
esosman@ieee-dot-org.invalid