Die Verbindung zwischen 'System.out.println ()' und 'toString ()' in Java

8

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

%Vor%

Wenn die Hauptklasse ausgeführt wird, wird eine Ausgabe als "abc" ausgegeben. Wenn ich den Code lösche, der toString() überschreibt, gibt es eine Ausgabe als "A@659e0bfd" . Kann jemand erklären, was das Arbeitsprinzip von System.out.println() ist, wenn ich den Parameter als Objekt verwende? Ist es vollständig mit toString() Methode verbunden?

    
Doğa Can Yanıkoğlu 28.03.2015, 15:36
quelle

3 Antworten

11

System.out ist ein %Co_de% . Printstream definiert mehrere Versionen der Funktion PrintStream , um Zahlen, Strings usw. zu verarbeiten. Wenn Sie println() mit einem beliebigen Objekt als Parameter aufrufen, erhalten Sie die Version der Funktion, die auf PrintStream.println() wirkt. Diese Version der Funktion

  

... ruft zuerst String.valueOf (x) auf, um den String-Wert des gedruckten Objekts zu erhalten ...

Betrachten Sie Object sehen wir, dass es

zurückgibt
  

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

Kurz gesagt, String.valueOf(Object) ruft die System.out.println(someObject) -Funktion dieses Objekts auf, um das Objekt in eine Zeichenfolgendarstellung zu konvertieren.

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

zurückgibt
  

Eine Zeichenfolge bestehend aus dem Namen der Klasse, deren Objekt eine Instanz ist, dem At-Zeichen "@" und der vorzeichenlosen hexadezimalen Darstellung des Hash-Codes des Objekts.

Oder mit anderen Worten:

%Vor%

Wenn Sie also Object.toString() für ein Objekt aufrufen, das keine eigene Version von toString () definiert, erhalten Sie möglicherweise die System.out.println() version, die wie "classname @ someHexNumber" aussieht.

    
Kenster 28.03.2015, 15:56
quelle
3

toString() ist eine Methode, die für alle Klassen in der Klasse Object (Root der Erbenstruktur) existiert.

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

Wenn Sie die Methode toString() nicht überschreiben, ruft SOP das übergeordnete Element toString() auf. Wenn parent die Objektklasse ist, wird der hashCode des Objekts

ausgegeben

Wenn Sie die Methode überschreiben, ruft SOP Ihre toString() Methode

auf     
CMPS 28.03.2015 15:41
quelle
0

System.out.println (obj) wird die zurückgegebene Zeichenfolge aus obj.toString () ausgeben, wenn Sie sie nicht überschreiben, wird sie die Basismethode object.toString () aufrufen, die standardmäßig die Methode toString für die Klasse Object eine Zeichenfolge zurückgibt bestehend aus dem Namen der Klasse, deren Objekt eine Instanz ist, dem At-Zeichen "@" und der vorzeichenlosen hexadezimalen Darstellung des Hash-Codes des Objekts. Mit anderen Worten, diese Methode gibt eine Zeichenkette gleich dem Wert von:

zurück %Vor%     
sam schonstal 28.03.2015 15:45
quelle

Tags und Links