Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Metodo ToString() | Classi
Java Avanzato

book
Metodo ToString()

Come stampare più facilmente un oggetto?

Per visualizzare tutti i dati di un oggetto utilizzando il comando System.out.println(object); in Java, esiste un metodo chiamato toString();.

toString()

Il metodo toString in Java è un metodo integrato che appartiene alla classe Object. Viene utilizzato per restituire una rappresentazione testuale di un oggetto. Di default, quando chiamiamo toString su un oggetto, restituisce una stringa che contiene il nome della classe seguito dall'hashcode dell'oggetto. Vediamo l'esempio:

Main.java

Main.java

copy
package com.example;

class Person {
String name;
int age;
String gender;

public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
}

public class Main {
public static void main(String[] args) {
Person bob = new Person("Bob", 20, "male");
System.out.println(bob);
}
}
1234567891011121314151617181920
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } }

HashCode

Un hashcode, in termini semplici, è un identificatore univoco per un oggetto che è memorizzato in memoria. Possiamo anche visualizzare il codice hash di un oggetto chiamando il metodo hashCode() su di esso, ad esempio:

Main.java

Main.java

copy
package com.example;

class Person {
String name;
int age;
String gender;

public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
}

public class Main {
public static void main(String[] args) {
Person bob = new Person("Bob", 20, "male");
int code = bob.hashCode();
System.out.println(code);
}
}
123456789101112131415161718192021
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); int code = bob.hashCode(); System.out.println(code); } }

In questo caso, sorge la domanda: come possiamo ottenere qualcosa di più specifico invece del codice hash di un oggetto? Per tali casi, possiamo sovrascrivere il metodo toString().

Ereditarietà e sovrascrittura dei metodi sono argomenti approfonditi che studieremo in un corso separato. Per ora, utilizzeremo la sovrascrittura dei metodi solo per il metodo toString().

Come usare toString()

Per sovrascrivere un metodo, è necessario utilizzare la seguente sintassi:

Main.java

Main.java

copy
@Override
public String toString() {
// block of code
}
1234
@Override public String toString() { // block of code }

Si utilizza l’annotazione @Override prima di questo metodo. Con questa annotazione, il compilatore riconosce che si sta sovrascrivendo questo metodo. Successivamente, si specifica la sintassi public String toString(), indicando quale metodo esatto si sta sovrascrivendo.

Nel corpo di questo metodo, si definisce come l’oggetto deve essere rappresentato come stringa. Sovrascriviamo il metodo per la classe Person:

Person.java

Person.java

copy
class Person {
String name;
int age;
String gender;

public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}

@Override
public String toString() {
return "Class Person;" + System.lineSeparator()
+ "name = " + name + ";" + System.lineSeparator()
+ "age = " + age + ";" + System.lineSeparator()
+ "gender = " + gender + ".";
}
}
12345678910111213141516171819
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }

Il comando System.lineSeparator() viene utilizzato per creare una nuova riga. Abbiamo definito come dovrebbe apparire il nostro oggetto concatenando stringhe con i relativi valori. Pertanto, quando proviamo a stampare un oggetto della classe Person, vedremo informazioni dettagliate su ciascun campo. Stampiamo un oggetto utilizzando il metodo main per vedere come appare:

Main.java

Main.java

copy
package com.example;

public class Main {
public static void main(String[] args) {
Person bob = new Person("Bob", 20, "male");
System.out.println(bob);
}
}

class Person {
String name;
int age;
String gender;

public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}

@Override
public String toString() {
return "Class Person;" + System.lineSeparator()
+ "name = " + name + ";" + System.lineSeparator()
+ "age = " + age + ";" + System.lineSeparator()
+ "gender = " + gender + ".";
}
}
12345678910111213141516171819202122232425262728
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }

Abbiamo ottenuto informazioni sulla classe a cui appartiene l'oggetto bob e dettagli su tutti i suoi campi. Possiamo quindi sovrascrivere e definire il metodo toString() per visualizzare le informazioni desiderate quando si stampa un oggetto. Creiamo un altro oggetto di questa classe utilizzando il costruttore per vedere e rafforzare come il metodo toString() trasforma l'oggetto:

Main.java

Main.java

copy
package com.example;

public class Main {
public static void main(String[] args) {
Person bob = new Person("Bob", 20, "male");
System.out.println(bob);
Person alice = new Person("Alice", 17, "female");
System.out.println(alice);
}
}

class Person {
String name;
int age;
String gender;

public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}

@Override
public String toString() {
return "Class Person;" + System.lineSeparator()
+ "name = " + name + ";" + System.lineSeparator()
+ "age = " + age + ";" + System.lineSeparator()
+ "gender = " + gender + "." + System.lineSeparator();
}
}
123456789101112131415161718192021222324252627282930
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); Person alice = new Person("Alice", 17, "female"); System.out.println(alice); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "." + System.lineSeparator(); } }

Possiamo vedere che il nuovo oggetto alice viene visualizzato nella console utilizzando lo stesso modello.

Conclusione

Utilizzando il metodo toString(), abbiamo notevolmente semplificato il processo di visualizzazione delle informazioni sugli oggetti a schermo, permettendoci di risparmiare spazio nel metodo main.

1. Perché abbiamo bisogno del metodo toString()?

2. Quale annotazione dovrebbe essere utilizzata sopra il metodo toString()?

question mark

Perché abbiamo bisogno del metodo toString()?

Select the correct answer

question mark

Quale annotazione dovrebbe essere utilizzata sopra il metodo toString()?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 8

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

some-alt