speicheradresse?

Status
Nicht offen für weitere Antworten.

kostonstyle

Aktives Mitglied
hallo
bei der Befehle
Code:
      System.out.println("\n Alle Tiere durchgehen: \n");
      for(int i = 0; i < saeuger.length; ++i) {
          System.out.println(saeuger[i]);
          saeuger[i].steckbrief();
      }
bekomme ich folgende Ausgabe
Code:
app.typind.Elefant@1ff9dc36
 Ich bin ein Elefant.
app.typind.Gepard@4ce86da0
 Ich bin ein Gepard.
app.typind.Elefant@2f754ad2
 Ich bin ein Elefant.
app.typind.Elefant@3d833955
 Ich bin ein Elefant.
was bedeutet die Hexazahlen @1ff9dc36, ist das eine Speicheradresse?

danke kostonstyle
 

faetzminator

Gesperrter Benutzer
Du rufst System.out.println(Object o) auf, das macht o.toString(). Laut Javadoc gibt es bei Object folgendes zurück: getClass().getName() + '@' + Integer.toHexString(hashCode())
-> also ist es der hashCode der Klasse
Wenn du den Steckbrief willst, kannst du einfach .toString() in deiner Klasse überschreiben, einfach
Code:
public String toString() {
    return steckbrief();
}
Anm.: schönheitshalber sollte diese Methode getSteckbrief() heissen
 

0x7F800000

Top Contributor
was bedeutet die Hexazahlen @1ff9dc36, ist das eine Speicheradresse?
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#toString()

Code:
Integer.toHexString(hashCode())
...ist diese komische Zahl, wie man der API entnehmen kann, vorausgesetzt man guggt da rein...

Was dieser hashCode ist, hängt davon ab wie du es implementiert hast, bzw. wie es in der verwendeten JVM implementiert wurde, falls du es nicht selbst überschrieben hast.

Was es konkret ist weiß kein Mensch, und will es normalerweise auch nicht wirklich wissen.
 

hdi

Top Contributor
Und eigentlich sollte es die Methode getSteckbrief() gar nicht (public) geben, wenn du genau das bei toString() machst. Das wäre einfach doppelt gemoppelt. Die toString()-Methode überschreibt man für eine Klasse so, dass sie sinnvolle Infos über das Objekt preisgibt. Also "ich bin ein Elefent" wäre ja ein gutes Bsp. Wenn man sowas machen will, also ein Objekt textuell beschreiben, nimmt man immer die toString() Methode, und macht sich nicht eine neue Methode dafür. Dafür ist ja toString() gedacht. Prinzipiell sollte das Überschreiben der toString() Methode eines der ersten Dinge sein, die man macht wenn man eine Klasse erstellt. Das zwingt einen u.a. auch dazu, gleich mal nachzudenken wie man das Objekt beschreibt -> hilft beim finden von sinnvollen Member-Variablen.
 

brainray

Mitglied
Um es noch einmal anders zu beleuchten: was Dir gezeigt wird (nach dem @), ist die Referenz auf den Hash-Speicherort des jeweiligen Objekts als Hex-Wert.

Das kommt daher, dass System.out.println - sofern es auf ein Objekt verweist, wie in Deinem Fall - die (super-) Methode von Object "toString" benutzt. Da Du diese nicht selbst überschreiben hast, wird, quasi als default, die Objektreferenz zurückgegeben.

Siehe toString: Object (Java Platform SE 6))

Grüße

Ray
 
Zuletzt bearbeitet:

HoaX

Top Contributor
Um es noch einmal anders zu beleuchten: was Dir gezeigt wird (nach dem @), ist die Referenz auf den Hash-Speicherort des jeweiligen Objekts als Hex-Wert.

Das kommt daher, dass System.out.println - sofern es auf ein Objekt verweist, wie in Deinem Fall - die (super-) Methode von Object "toString" benutzt. Da Du diese nicht selbst überschreiben hast, wird, quasi als default, die Objektreferenz zurückgegeben.

Siehe toString: Object (Java Platform SE 6))

Grüße

Ray

Nein, nix Referenz, sondern HashCode, siehe die Antwort deiner Vorposter.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben