2015-03-28 10 views
8

Was ist die Verbindung zwischen System.out.println() und toString() in Java? z:Die Verbindung zwischen 'System.out.println()' und 'toString()' in Java

public class A { 
    String x = "abc"; 

    public String toString() { 
     return x; 
    } 
} 

public class ADemo { 
    public static void main(String[] args) { 
     A obj = new A(); 
     System.out.println(obj); 
    } 
} 

Wenn Hauptklasse ausgeführt wird, gibt es eine Ausgabe als "abc". Wenn ich den Code entferne, der toString() überschreibt, gibt es eine Ausgabe als "[email protected]". Kann also jemand erklären, was das Arbeitsprinzip von System.out.println() ist, wenn ich den Parameter als ein Objekt verwende? Ist es vollständig mit der Methode toString() verbunden?

+0

abcd efgh. A B C D. –

Antwort

11

System.out ist ein PrintStream. Printstream definiert mehrere Versionen der println()-Funktion, um Zahlen, Strings usw. zu verarbeiten. Wenn Sie PrintStream.println() mit einem beliebigen Objekt als Parameter aufrufen, erhalten Sie the version of the function that acts on an Object. Diese Version der Funktion

... ruft zunächst String.valueOf (x) der gedruckten Objekts String-Wert zu erhalten ...

bei String.valueOf(Object) Sehen, sehen wir, dass es wieder

Wenn das Argument null ist, dann eine Zeichenkette gleich "null"; Andernfalls wird der Wert von obj.toString() zurückgegeben.

So lange Geschichte kurz, System.out.println(someObject) Anrufe, das toString() Funktion des Objekts das Objekt in einer String-Darstellung zu konvertieren.

Wenn Ihr Objekt seine eigene toString()-Funktion definiert, dann wird das aufgerufen. Wenn Sie eine solche Funktion nicht bereitstellen, übernimmt Ihr Objekt toString() von einer seiner übergeordneten Klassen. Im schlimmsten Fall erbt es Object.toString(). Diese Version von toString() ist definiert

eine Zeichenkette zurück, bestehend aus dem Namen der Klasse, von denen das Objekt ist eine Instanz, die at-Zeichen Zeichen '@‘und die unsigned hexadezimale Darstellung des Hash Code des Objekts.

Oder mit anderen Worten:

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

Also, wenn Sie System.out.println() auf einem Objekt aufrufen, die nicht seine eigene Version von toString nicht definiert(), können Sie die Object Version erhalten, die wie folgt aussieht "Klassenname @ someHexNumber".

3

toString() ist eine Methode, die in der Object-Klasse (Root of the inheritness tree) für alle Klassen vorhanden ist.

System.out.print() (SOP) ruft die toString-Methode auf, wenn ein Objekt gefüttert wird.

Wenn Sie die Methode toString() nicht überschrieben werden soll, wird SOP toString() die Eltern nennen, die, wenn Eltern die Objektklasse ist, wird es die hashCode des Objekts

Wenn Sie die Methode überschreiben, SOP rufen gedruckt werden Ihre toString() Methode

0

System.out.println (Obj) wird die zurückgegebene Zeichenfolge aus obj.toString() drucken, wenn Sie es nicht überschreiben, wird es die Basis-object.toString() -Methode aufrufen, die standardmäßig die toString-Methode für die Klasse Object gibt eine Zeichenfolge zurück, die aus dem Namen der Klasse besteht, deren Objekt eine Instanz ist, dem At-Zeichen "@" und der vorzeichenlosen hexadezimalen Darstellung o f der Hash-Code des Objekts. Mit anderen Worten, gibt diese Methode einen String gleich den Wert von:

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