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".
abcd efgh. A B C D. –