toString() in einer Klasse überschreiben

Ein Überschreiben der Methode toString() der Klasse java.lang.Object kann gut u.a. zu Zwecken des Debugging genutzt werden.

Alle Klassen erben in Java letztlich die in java.lang.Object implementierten Methoden. Dies führt u.a. dazu, dass ein Objekt als Parameter einer der PrintStream-Methoden print() oder println() ausgegeben werden kann, da bei Übergabe die Methode toString() implizit aufgerufen wird.

System.out.println(myObject);   // myObject@b815859

Die etwas kryptische Ausgabe resultiert daraus, dass diese der Routine

getClass().getName() + "@" + Integer.toHexString(hashCode());

entspringt. Das heißt somit, dass die PrintStream-Ausgabe eines Objektes per print() oder println() lediglich aus dessen Namen (mit Package-Angabe) und dessen Hash-Repräsentation getrennt durch ein '@' besteht.
Dies lässt sich durch Überschreiben in eine persönlich nützlichere Form ändern:

public class ToStringUeberschreiben {

private String s = "Hallo Welt!";
private int i = 10;
public static final double pi = 3.14;

    public static void main(String[] args) {
        System.out.println(new ToStringUeberschreiben());
    }
    
    public String toString(){
        return this.s + " | " + this.i + " | " + pi;
    }
}

Hier wird die Methode toString() neu implementiert, indem eine Ausgabe der Members der Klasse ToStringUeberschreiben eingerichtet wird. Die Ausführung des Programms ergibt hier:

Hallo Welt! | 10 | 3.14

Die Tatsache, dass die Methode toString() während der Ausgabe durch println() nicht explizit aufgerufen wird zeigt, dass dies als Standard-Routine im Hintergrund geschieht.