Skip to content

La méthode toString

Introduction

La méthode toString() est une méthode très utile, notamment pour le débogage et la production de log. Elle permet d’obtenir une représentation sous forme de chaîne de caractères d’un objet.

Elle est implicitement appelée par le compilateur lorsqu’on concatène une chaîne de caractères avec un objet.

Par défaut l’implémentation de la méthode toString() dans la classe Object retourne le type de l’objet suivi de @ suivi du code de hachage de l’objet.

Il suffit de redéfinir cette méthode pour obtenir la représentation souhaitée.

À quoi sert toString() ?

  • C'est la représentation texte, lisible par un humain d'un objet.
  • Utilisée automatiquement quand vous faites System.out.println(obj), la concaténation "..." + obj, ou quand une collection affiche ses éléments.
  • Par défaut (hérité de Object), elle renvoie quelque chose comme NomDeClasse@1a2b3c (nom de classe + hashcode en hex), ce qui est rarement utile.\ 👉 On surcharge donc presque toujours toString().

Signature et règles d'or

@Override
public String toString() { ... }

Bonnes pratiques :

  • Lisible et stable (utile pour le débogage).
  • Sans effet de bord (ne modifie pas l'état, ne déclenche pas d'I/O coûteux).
  • Évite les infos sensibles (mots de passe, tokens...).
  • Tolérante aux null (sur champs internes).

Exemple simple : classe Etudiant

import java.util.StringJoiner;
import java.time.LocalDate;

public class Etudiant {
    private final String nom;
    private final String prenom;
    private final LocalDate dateNaissance;
    private final char sexe;

    public Etudiant(String nom, String prenom, LocalDate dateNaissance, char sexe) {
        this.nom = nom;
        this.prenom = prenom;
        this.dateNaissance = dateNaissance;
        this.sexe = sexe;
    }

    @Override
    public String toString() {
        return new StringJoiner(", ", "Etudiant{", "}")
                .add("nom='" + nom + "'")
                .add("prenom='" + prenom + "'")
                .add("dateNaissance=" + dateNaissance)
                .add("sexe=" + sexe)
                .toString();
    }

    public static void main(String[] args) {
        Etudiant e = new Etudiant("Tremblay", "Alex", LocalDate.of(2006, 5, 12), 'M');
        System.out.println(e);
        // Etudiant{nom='Tremblay', prenom='Alex', dateNaissance=2006-05-12, sexe=M}
    }
}

Collections et tableaux

  • Les collections (List, Set, Map) appellent toString() sur leurs éléments.
  • Les tableaux nécessitent Arrays.toString(...) ou Arrays.deepToString(...).

Enum et toString()

enum Niveau {
    DEBUTANT("Débutant"),
    INTERMEDIAIRE("Intermédiaire"),
    AVANCE("Avancé");

    private final String label;
    Niveau(String label) { this.label = label; }

    @Override
    public String toString() { return label; }
}

Pièges à éviter

  1. Références cycliques → récursion infinie
  2. Données sensibles → ne pas afficher
  3. Coût élevé → garder léger
  4. Ne pas confondre avec sérialisation (JSON, XML, etc.)