Whenever you pass an object to System.out.println( )
or any equivalent method, or involve it in string
concatenation, Java will automatically call its toString( )
method. Java “knows” that every object has a
toString( )
method, since
java.lang.Object
has one and all
classes are ultimately subclasses of Object
. The
default implementation, in java.lang.Object
, is
neither pretty nor interesting: it just prints the class name, an @
sign, and the object’s hashCode( )
value (see Section 8.4). For example, if you run
this code:
/* Demonstrate toString( ) without an override */ public class ToStringWithout { int x, y; /** Simple constructor */ public ToStringWithout(int anX, int aY) { x = anX; y = aY; } /** Main just creates and prints an object */ public static void main(String[] args) { System.out.println(new ToStringWithout(42, 86)); } }
you might see this uninformative output:
ToStringWithout@990c747b
So, to make it print better, you should provide an implementation of
toString( )
that prints the class name and some of
the important state in all but the most trivial classes. This gives
you formatting control in println( )
, in
debuggers, and anywhere your objects get referred to in a
String
context. Here is the previous program done
over with a toString( )
method:
/* Demonstrate toString( ) with an override */ public class ToStringWith { int x, y; /** Simple constructor */ public ToStringWith(int anX, int aY) { x = anX; y = aY; } /** Override toString */ public String toString( ) { return "ToStringWith[" + x + "," + y + "]"; } /** Main just creates and prints an object */ public static void main(String[] args) { System.out.println(new ToStringWith(42, 86)); } }
This version produces the more useful output:
ToStringWith[42,86]
3.137.217.220