Printing Objects: Formatting with toString( )
Problem
You want your objects to have a useful default format.
Solution
Override the toString( )
method inherited from java.lang.Object
.
Discussion
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 ...
Get Java Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.