Object.toString în Java

Returnează textul care descrie obiectul; este apelată automat de println și de operatorul + cu șiruri.

Sintaxă
String toString()

Ce face Object.toString

Când scrii System.out.println(obiect) sau "Text: " + obiect, Java apelează toString() pe obiect. Implementarea din Object returnează numele clasei, @ și codul hash în hexazecimal, de exemplu Main$Elev@1b6d3586: corect, dar puțin util, iar partea de după @ diferă la fiecare rulare.

Suprascrie toString() în clasele tale ca să returneze ceva lizibil. Este de mare ajutor la depanare și în mesajele de eroare. Records, colecțiile (List, Map) și clasele ca LocalDate au deja un toString util.

Ce returnează

Un String care descrie obiectul.

Exemple

Exemplul 1: toString implicit

Nu afișăm valoarea direct (diferă la fiecare rulare), ci verificăm din ce este formată.

public class Main {
    static class Elev {
        String nume = "Ana";
    }

    public static void main(String[] args) {
        Elev e = new Elev();
        String text = e.toString();
        System.out.println(text.startsWith("Main$Elev@"));
        System.out.println(text.equals(e.getClass().getName() + "@" + Integer.toHexString(e.hashCode())));
    }
}

Rezultat

true
true

Exemplul 2: toString suprascris

import java.util.List;

public class Main {
    static class Elev {
        final String nume;
        final double medie;

        Elev(String nume, double medie) {
            this.nume = nume;
            this.medie = medie;
        }

        @Override
        public String toString() {
            return nume + " (media " + medie + ")";
        }
    }

    public static void main(String[] args) {
        Elev e = new Elev("Ana", 9.5);
        System.out.println(e);
        System.out.println("Premiantă: " + e);
        System.out.println(List.of(e, new Elev("Ion", 8.75)));
    }
}

Rezultat

Ana (media 9.5)
Premiantă: Ana (media 9.5)
[Ana (media 9.5), Ion (media 8.75)]

Exemplul 3: Clase care au deja toString

import java.time.LocalDate;
import java.util.Map;

public class Main {
    record Adresa(String strada, String oras) {}

    public static void main(String[] args) {
        System.out.println(new Adresa("Lăpușneanu 5", "Iași"));
        System.out.println(LocalDate.of(2026, 12, 1));
        System.out.println(Map.of("Ana", 10));
    }
}

Rezultat

Adresa[strada=Lăpușneanu 5, oras=Iași]
2026-12-01
{Ana=10}

Greșeli frecvente

  • Afișezi un array cu println(array) și primești ceva ca [I@6d06d69c: array-urile nu suprascriu toString. Folosește Arrays.toString(array).
  • Pui în toString date sensibile (parole, CNP-uri): textul ajunge ușor în loguri.

Comenzi înrudite

  • Objects.toString: Transformă un obiect în text fără să arunce excepție pentru null: dă „null” sau textul ales de tine.
  • Object: Clasa de bază a tuturor claselor Java; getClass() spune din ce clasă face parte un obiect la rulare.
  • Object.equals: equals() spune dacă două obiecte sunt „egale”, iar hashCode() dă un număr folosit de HashMap și HashSet; se suprascriu împreună.
  • String.valueOf: Transformă orice valoare (număr, boolean, char, obiect, char[]) în String; copyValueOf face un șir dintr-un char[].