Lerne Coding
Wie die toString()-Methode in Java funktioniert!
22.09.2022

Erklärung für die toString()-Methode in Java

Inhaltsverzeichnis
[[TABLE OF CONTENTS]]
access_timeGeschätzte Lesezeit ca. Minuten

Die toString()-Methode scheint unscheinbar. Sie verfügt jedoch über eine große Kraft, die dir helfen kann! Denn jedes Objekt in Java hat eine toString()-Methode. Du wirst lernen, wie du sie verwenden kannst. Ebenso wie du deine eigene toString()-Methode implementieren kannst.

Das Wichtigste in Kürze!  💡

  • Alle Objekte haben eine toString()-Methode.
  • Die toString()-Methode kann zum Debuggen oder Logging von Objekten verwendet werden.
  • Die Standardausgabe der toString()-Methode ist immer der Klassenname, gefolgt von einem @ und der Referenz ID als Integer. Dieser Kennzeichner ist immer eindeutig.
  • Die toString()-Methode kann überschrieben werden. Diese ist nützlich, um spezifischere Informationen auszugeben, zum Debuggen oder Logging.
  • Die toString()-Methode wird automatisch aufgerufen bei einem System.out.println(), da dort eine String erwartet wird.

Nun betrachten wir uns die toString()-Methode einmal im Detail. Anschließende kannst du die Methode komplett durchblicken und anwenden.

So wendest du die toString()-Methode in Java an

Die toString()-Methode anzuwenden, ist einfach. Den die Methode hat keine Übergabeparameter, sondern gibt immer nur einen String zurück. Als Beispiel habe ich folgende Klasse Country erstellt, die ein Land repräsentieren soll. Dort haben wir ein Feld für die Anzahl der Bevölkerung in Millionen, das Gründungsjahr und nicht zu vergessen für den Namen angelegt.

public class Country {

    private String name;
    private int population;
    private GregorianCalendar foundingYear;

    Country(String name, int population,GregorianCalendar foundingYear) {

        this.name = name;
        this.population = population;
        this.foundingYear = foundingYear;

    }
}

Jetzt möchten wir einmal die toString()-Methode aufrufen. Du wirst dabei feststellen, dass die Ausgabe erst einmal nicht sonderlich aussagekräftig ist. Wichtig ist, dass du für die System.out.print<*> Methoden nicht unbedingt die toString()-Methode selbst aufrufen musst. Der Grund ist, dass die toString()-Methode durch Java automatisch ausgeführt wird, wenn ein Objekt an die Print-Methoden übergeben wird.

GregorianCalendar date = new GregorianCalendar(1949, Calendar.JANUARY, 1);

Country germany = new Country("Deutschland", 83, date);

System.out.println(germany.toString());

System.out.println(germany);

Als Ausgabe wirst du jetzt so etwas wie Country@13fee20c erhalten. Das liegt an der Standardimplementierung der Klasse Object. Jede eigene Klasse – also auch unsere Klasse Country – erbt automatisch von der Klasse Objekt und verfügt deshalb über diese Standardimplementierung der toString()-Methode. Die Implementierung sieht vor, dass der Klassenname von einem Hash gefolgt wird. Wie die Implementierung aussieht, siehst du im folgenden Codebeispiel. Der Hash identifiziert ein Objekt eindeutig. Das bedeutet, wenn zwei Objekte den gleichen Hash besitzen, ist es zweimal das gleiche Objekt.

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode()); // "Country" + "@" + "13fee20c"
}

Die toString()-Methode in einer Java Klasse überschreiben

Nachdem wir nun das Standardverhalten kennengelernt haben, wollen wir in unserer Country-Klasse die toString()-Methode überschreiben. Der String der Standardimplementierung sieht sehr kryptisch aus und gibt uns auch keine Information über das Objekt. Wenn wir die toString()-Methode überschreiben, können wir selber implementieren, wie der String aussehen soll. Für unsere Klasse Country könnten wir einen aussagekräftigen String erstellen, der uns beschreibt, um welches Land es geht, die Anzahl der Bevölkerung und wann es gegründet wurde. Diesen String könnte man dann zum Beispiel auch in einem Log-File schreiben. Die Implementierung unserer toString()-Methode könnte zum Beispiel so aussehen:

@Override
public String toString() {
    return String.format("[%s] Bevölkerung in Millionen: %d - Gegründet: %d",name,population,foundingYear.get(Calendar.YEAR));
}

Letztlich kannst du eine Methode toString() mit dem Return Typ String und public anlegen, anschließende kannst du dein Verhalten programmieren, wie du den String erhalten möchtest. Wie bereits beschrieben, wollen wir als Erstes das Land, gefolgt von der Bevölkerung und dem Gründungsjahr erhalten.

Eine Ausgabe könnte nun zum Beispiel so aussehen, wie hier für Deutschland und die Niederlande:

[Deutschland] Bevölkerung in Millionen: 83 - Gegründet: 1949
[Niederlande] Bevölkerung in Millionen: 17 - Gegründet: 1581

Zusätzlich siehst du hier noch das Keyword @Override. Diese gehört zum guten Programmierstil in Java. Deine IDE – ich verwende zum Beispiel IntelliJ – setzt diese auch automatisch beim Erstellen der toString()-Methode. Es hilft einen Überblick darüber zu gewinnen, dass man gerade eine Methode überschreibt. Ein weiter Grund für @Override ist, dass der Compiler einen warnt, wenn ein Methodensignatur „überschrieben“ wird, die keines der Elternklassen besitzt. Ein Beispiel könnte sein, dass ein Methodenname falsch geschrieben oder einen Parameter vergessen wurde. In beiden Fällen würde der Compiler uns darauf aufmerksam machen, dass die Methode keine Methode einer Elternklasse überschreibt.

Wofür ist die toString()-Methode geeignet?

Wir haben in diesem Artikel gelernt, dass die toString()-Methode eher für das Logging und Debugging geeignet ist. Wenn wir jedoch einen String unseres Objektes sauber formatiert in ein Interface ausgeben wollen, sollten wir sie nicht verwenden. In einer eigenen Methode kannst du hierzu hervorragend auf die String.format() Funktion zurückgreifen. Denn die System.out.print-Methoden greifen immer auf die toString()-Methode zurück – was ungünstig ist, falls beim Debuggen nur eine Information angezeigt wird, die für den Nutzer im Frontend bestimmt ist.

Bildquelle - Vielen Dank an die Ersteller:innen fĂĽr dieses Bild
Kommentare zum Artikel

Es sind noch keine Kommentare vorhanden? Sei der/die Erste und verfasse einen Kommentar zum Artikel "Wie die toString()-Methode in Java funktioniert!"!

Kommentar schreiben

Verwante Beiträge
close