CodeGym /Java Blog /Random-IT /Metodo Java toString()
John Squirrels
Livello 41
San Francisco

Metodo Java toString()

Pubblicato nel gruppo Random-IT
Molto spesso durante la creazione di un programma è necessario scoprire il contenuto di un oggetto. Per questi scopi, la classe Java Object , la classe Java più elementare nella gerarchia delle classi, definisce uno speciale metodo toString() . Restituisce una stringa di caratteri che descrive l'oggetto. L'implementazione predefinita del metodo toString() in Java produce un output come questo:
package.class@hashCode
cioè toString , che è stato definito in java.lang.Object fornisce il codice hash dell'oggetto in forma esadecimale. Questo spesso non è molto chiaro e utile. Pertanto, quando si crea una nuova classe, è consuetudine sovrascrivere toString() in modo che la stringa restituita contenga il nome della classe, i nomi e i valori di tutte le variabili. L'override corretto del metodo toString può aiutare con la registrazione e il debug di un programma Java e fornisce informazioni preziose e importanti. In poche parole, il metodo toString() viene utilizzato in Java per ottenere un oggetto stringa che rappresenta il valore di un oggetto numerico. In altre parole, converte un numero in una stringa. Se il metodo accetta un tipo di dati semplice come argomento, viene restituito un oggetto stringa che rappresenta il valore del tipo di dati semplice.

Esempio del metodo Java toString()

Di solito se crei una classe, oltre al metodo toString() in Java devi sovrascrivere i metodi equals , hashCode e compareTo per sapere come lavorare con i suoi oggetti. Ma per ora concentriamoci su toString . Nella maggior parte dei casi, inviare informazioni testuali su un oggetto è abbastanza semplice. Devi solo capire cosa vorrebbe vedere esattamente l'utente durante l'accesso. Facciamo un esempio e creiamo una Classe che descriva un punto sul piano. Ha due coordinate: coordinataX, coordinataY. Naturalmente, dovrebbero essere visualizzati sullo schermo se un utente chiede "che oggetto è questo" proprio come il nome della classe stessa. Questo è ciò che dimostreremo nel metodo toString() sottoposto a override. Ora creiamo la classe stessa, i suoi campi (coordinate), un costruttore, i getter per ottenere le coordinate (certo, è possibile non crearli, ma dal punto di vista del corretto utilizzo dell'OOP, i getter sono una buona pratica). Giusto per illustrare, creiamo anche un metodo che crea un nuovo punto: la somma degli altri due e sovrascrive anche i metodi equals e hashCode .
public class Point implements Comparable<Point> {
   private final int coordinateX;
   private final int coordinateY;

   public Point(final int coordinateX, final int coordinateY) {
       this.coordinateX = coordinateX;
       this.coordinateY = coordinateY;
   }

   public int getX() {
       return coordinateX;
   }

   public int getY() {
       return coordinateY;
   }

   public Point sum(final Point that) {
       return new Point(coordinateX + that.coordinateX, coordinateY + that.coordinateY);
   }

// here we override toString with coordinates and class name
   @Override
   public String toString() {
       return "Point{"
               + "X: " + getX()
               + ", Y: " + getY()
               +  '}';
   }

   @Override
   public boolean equals(Object o) {
       if (o == this) {
           return true;
       }
       if (o == null || o.getClass() != this.getClass()) {
           return false;
       }

   @Override
   public int hashCode() {
       return coordinateX + coordinateY;

   }
Ora creiamo una classe testing e un metodo main. Lì abbiamo due punti e il terzo, che otteniamo dalla somma di due punti. Applichiamo il metodo toString a questo punto e lo stampiamo.
//toString() method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
     //call toString explicitly
       System.out.println(mySum.toString());
   }
}
Il risultato del lavoro di questo programma è il seguente:
Punto{X: 3, Y: 15}
In realtà non è necessario chiamare esplicitamente il metodo toString e molto spesso non lo fai. Per chiamare il metodo toString() è sufficiente passare l'oggetto desiderato a System.out.println . Quindi la nostra classe di test sarà simile a questa:
//toString method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
       //call toString implicitly
       System.out.println(mySum);
   }
}
L'output del programma è lo stesso di prima. Cosa succede se non sovrascriviamo il metodo toString , ma vogliamo stampare l'oggetto? In questo caso verrà chiamato il metodo toString della classe Object . Nel nostro esempio, se rimuoviamo il metodo toString dalla nostra classe Point e lasciamo tutto com'è nella classe test, otterremo il seguente risultato:
Punto@12
Qui abbiamo il codice hash dell'oggetto in esadecimale.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION