Hoe gebruik je de toString-methode in Java?

Kan iemand mij het concept van de toString()methode uitleggen, gedefinieerd in de Objectklasse? Hoe wordt het gebruikt en wat is het doel ervan?


Antwoord 1, autoriteit 100%

Van de Object.toStringdocumenten:

Retourneert een tekenreeksrepresentatie van de
object. Over het algemeen is de toString
methode retourneert een tekenreeks die
“tekstueel vertegenwoordigt” dit object.
Het resultaat moet een beknopte maar
informatieve weergave dat is
gemakkelijk voor een persoon om te lezen. Het is
aanbevolen dat alle subklassen
deze methode overschrijven.

De toStringmethode voor klasse Object
geeft een string terug die bestaat uit de
naam van de klasse waarvan het object
is een instantie, het apenstaartje
`@’, en de niet-ondertekende hexadecimale
weergave van de hash-code van de
object. Met andere woorden, deze methode
geeft een tekenreeks terug die gelijk is aan de waarde
van:

getClass().getName() + '@' + Integer.toHexString(hashCode())

Voorbeeld:

String[] mystr ={"a","b","c"};
System.out.println("mystr.toString: " + mystr.toString());
output:- mystr.toString: [Ljava.lang.String;@13aaa14a

Antwoord 2, autoriteit 48%

Gebruik van de String.toString:

Telkens wanneer u de constructor met de naam waarde in de vorm Stringmoet onderzoeken, kunt u eenvoudig String.toStringgebruiken…
voor een voorbeeld…

package pack1;
import java.util.*;
class Bank {
    String n;
    String add;
    int an;
    int bal;
    int dep;
    public Bank(String n, String add, int an, int bal) {
        this.add = add;
        this.bal = bal;
        this.an = an;
        this.n = n;
    }
    public String toString() {
        return "Name of the customer.:" + this.n + ",, "
                + "Address of the customer.:" + this.add + ",, " + "A/c no..:"
                + this.an + ",, " + "Balance in A/c..:" + this.bal;
    }
}
public class Demo2 {
    public static void main(String[] args) {
        List<Bank> l = new LinkedList<Bank>();
        Bank b1 = new Bank("naseem1", "Darbhanga,bihar", 123, 1000);
        Bank b2 = new Bank("naseem2", "patna,bihar", 124, 1500);
        Bank b3 = new Bank("naseem3", "madhubani,bihar", 125, 1600);
        Bank b4 = new Bank("naseem4", "samastipur,bihar", 126, 1700);
        Bank b5 = new Bank("naseem5", "muzafferpur,bihar", 127, 1800);
        l.add(b1);
        l.add(b2);
        l.add(b3);
        l.add(b4);
        l.add(b5);
        Iterator<Bank> i = l.iterator();
        while (i.hasNext()) {
            System.out.println(i.next());
        }
    }
}

… kopieer dit programma naar uw Eclipse en voer het uit… u krijgt de ideeën over String.toString


Antwoord 3, autoriteit 45%

De toString()methode retourneert een tekstuelerepresentatie van een object. Een basisimplementatie is al opgenomen in java.lang.Objecten omdat alle objecten erven van java.lang.Objectis het gegarandeerd dat elk object in Java deze methode heeft.

De methode overschrijven is altijd een goed idee, vooral als het gaat om debuggen, omdat debuggers vaak objecten tonen door het resultaat van de toString()-methode. Dus gebruik een zinvolle implementatie, maar gebruik het voor technische doeleinden. De aanvraaglogica moet Getters gebruiken:

public class Contact {
  private String firstName;
  private String lastName;
  public Contact (String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }
  public String getFirstName() {return firstName;}
  public String getLastName() {return lastName;}
  public String getContact() {
    return firstName + " " + lastName;
  }
  @Override
  public String toString() {
    return "["+getContact()+"]";
  }
}

Antwoord 4, Autoriteit 18%

Het kan optioneel gebruiken binnen de context van een toepassing maar veel vaker wordt het gebruikt voor debugging-doeleinden. Wanneer u bijvoorbeeld een breekpunt in een IDE raakt, is het veel gemakkelijker om een ​​zinvolle toString()van objecten te lezen dan het is om hun leden te inspecteren.

Er is geen ingestelde vereiste voor wat een toString()-methode moet doen. Bij conventie zal het vaak de naam van de klasse vertellen en de waarde van relevante gegevenselementen. Vaker wel dan niet, toString()methoden worden automatisch gegenereerd in ID’s.

Vertrouwen op bepaalde uitvoer van een toString()-methode of het parseren van het binnen een programma is een slecht idee. Wat je ook doet, ga niet naar die route.


Antwoord 5, Autoriteit 14%

Tostring () Retourneert een string / tekstuele weergave van het object.
De methode toString() wordt vaak gebruikt voor diagnostische doeleinden zoals foutopsporing, logboekregistratie enz. om betekenisvolle details over het object te lezen.

Het wordt automatisch aangeroepen wanneer het object wordt doorgegeven aan println, print, printf, String.format(), assert of de tekenreeksaaneenschakelingsoperator.

De standaardimplementatie van toString() in klasse Object retourneert een tekenreeks die bestaat uit de klassenaam van dit object gevolgd door @-teken en de niet-ondertekende hexadecimale weergave van de hash-code van dit object met behulp van de volgende logica,

getClass().getName() + "@" + Integer.toHexString(hashCode())

Bijvoorbeeld het volgende

public final class Coordinates {
    private final double x;
    private final double y;
    public Coordinates(double x, double y) {
        this.x = x;
        this.y = y;
    }
    public static void main(String[] args) {
        Coordinates coordinates = new Coordinates(1, 2);
        System.out.println("Bourne's current location - " + coordinates);
    }
}

afdrukken

Bourne's current location - Coordinates@addbf1 //concise, but not really useful to the reader

Nu overschrijven toString() in de klasse Coördinaten zoals hieronder,

@Override
public String toString() {
    return "(" + x + ", " + y + ")";
}

resulteert in

Bourne's current location - (1.0, 2.0) //concise and informative

Het nut van het overschrijven van toString() wordt nog groter wanneer de methode wordt aangeroepen op verzamelingen die verwijzingen naar deze objecten bevatten. Bijvoorbeeld het volgende

public static void main(String[] args) {
    Coordinates bourneLocation = new Coordinates(90, 0);
    Coordinates bondLocation = new Coordinates(45, 90);
    Map<String, Coordinates> locations = new HashMap<String, Coordinates>();
    locations.put("Jason Bourne", bourneLocation);
    locations.put("James Bond", bondLocation);
    System.out.println(locations);
}

afdrukken

{James Bond=(45.0, 90.0), Jason Bourne=(90.0, 0.0)}

in plaats van dit,

{James Bond=Coordinates@addbf1, Jason Bourne=Coordinates@42e816}

Weinig implementatietips,

  1. Je moet bijna altijd de methode toString() overschrijven.Een van de gevallen waarin de overschrijving niet vereist is, zijn hulpprogrammaklassen die statische hulpprogrammamethoden groeperen, op de manier van java.util.Math. Het geval dat opheffing niet vereist is, is behoorlijk intuïtief; bijna altijd zou je het weten.
  2. De geretourneerde tekenreeks moet beknopt en informatief zijn, idealiter zelfverklarend.
  3. Tenminste, de velden die worden gebruikt om de gelijkwaardigheid tussen twee verschillende objecten vast te stellen, dwz de velden die worden gebruikt in de equals()implementatie van de methode moet worden uitgespuugd door de toString() methode.
  4. Geef accessors/getters voor alle instantievelden die zijn opgenomen in de geretourneerde tekenreeks. Bijvoorbeeld, in de klasse Coördinaten,

    public double getX() {
        return x;
    }
    public double getY() {
        return y;
    }
    

Een uitgebreide beschrijving van de toString()-methode staat in item 10 van het boek, Effective Java™, Second Edition, door Josh Bloch.


Antwoord 6, autoriteit 6%

Telkens wanneer u een Object (niet zijnde een String) in een String-context opent, wordt de toString() onder de dekens aangeroepen door de compiler.

Dit is waarom

Map map = new HashMap();
System.out.println("map=" + map);

werkt, en door de standaard toString() van Object in uw eigen klassen te overschrijven, kunt u uw objecten ook bruikbaar maken in String-contexten.

(en beschouw het als een zwarte doos! Gebruik de inhoud nooit voor iets anders dan presenteren aan een mens)


Antwoord 7, autoriteit 6%

Coderen:

public class Test {
    public static void main(String args[]) {
        ArrayList<Student> a = new ArrayList<Student>();
        a.add(new Student("Steve", 12, "Daniel"));
        a.add(new Student("Sachin", 10, "Tendulkar"));
        System.out.println(a);
        display(a);
    }
    static void display(ArrayList<Student> stu) {
        stu.add(new Student("Yuvi", 12, "Bhajji"));
        System.out.println(stu);
    }
}

Student.java:

public class Student {
    public String name;
    public int id;
    public String email;
    Student() {
    }
    Student(String name, int id, String email) {
        this.name = name;
        this.id = id;
        this.email = email;
    }
     public String toString(){           //using these toString to avoid the output like this [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]
          return name+" "+id+" "+email;     
         }  
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
    public int getId(){
        return id;
    }
    public void setId(int id){
        this.id=id;
    }
    public String getEmail(){
        return email;
    }
    public void setEmail(String email){
        this.email=email;
    }
}

output:

[Steve 12 Daniel, Sachin 10 Tendulkar]

[Steve 12 Daniel, Sachin 10 Tendulkar, Yuvi 12 Bhajji]

Als u geen gebruikte tostring () in Pojo (Student.java) klasse gebruikt, krijgt u een uitvoer als [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]. Om dit soort probleem te voorkomen, gebruiken we de methode van ToString ().


Antwoord 8, Autoriteit 5%

Correct overschreven ToString-methode kan helpen bij het loggen en debuggen van Java.


Antwoord 9, Autoriteit 4%

Afgezien van wat Cletus antwoordde met betrekking tot debugging, wordt het gebruikt wanneer u een object uitvoert, zoals wanneer u

gebruikt

System.out.println(myObject);

of

System.out.println("text " + myObject);

Antwoord 10, Autoriteit 2%

Het belangrijkste doel van toString is om een tekenreeksrepresentatie van een object te genereren, wat betekent dat de geretourneerde waarde altijd een tekenreeks is. In de meeste gevallen is dit gewoon de klasse- en pakketnaam van het object, maar in sommige gevallen, zoals StringBuilder, krijg je eigenlijk een String-tekst.


Antwoord 11

Als je eerst Python leert en daarna Java. Ik denk dat het dezelfde rol speelt als __str__()methode in Python, het is een magische methodezoals __dict__()en __init__()maar om te verwijzen naar een tekenreeks die het object vertegenwoordigt.


Antwoord 12

de toString()converteert het opgegeven object naar een tekenreekswaarde.


Antwoord 13

/**
 * This toString-Method works for every Class, where you want to display all the fields and its values
 */
public String toString() {
    StringBuffer sb = new StringBuffer();
    Field[] fields = getClass().getDeclaredFields(); //Get all fields incl. private ones
    for (Field field : fields){
        try {
            field.setAccessible(true);
            String key=field.getName();
            String value;
            try{
                value = (String) field.get(this);
            } catch (ClassCastException e){
                value="";
            }
            sb.append(key).append(": ").append(value).append("\n");
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}

Other episodes