Frage

Wenn ich tun:

int x[] = new int[2];
System.out.println("...> " + x);

der Ausgabewert ist wie folgt: [I@1b67f74

, so dass Hexadezimalnummer wird über auf die Speicheradresse, wo das Objekt zugeordnet wurde?

und [I, was es macht Sinn?

War es hilfreich?

Lösung

Nein, das Hex-Zahl sollte nicht als Speicheradresse interpretiert werden, in dem sich das Objekt befindet. In der Tat ist es der Hash-Code des Objekts. Die API-Dokumentation von Object.toString() sagt:

  

Die toString Methode zur Klasse Objekt gibt eine Zeichenfolge, bestehend aus dem Namen der Klasse von dem das Objekt eine Instanz ist, die at-Zeichen Zeichen '@‘und die unsigned hexadezimale Darstellung des Hash-Codes des Objekts. Mit anderen Worten, gibt diese Methode eine Zeichenfolge gleich den Wert von:

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

Die API-Dokumentation von java.lang.Object.hashCode() sagt:

  

So viel wie vernünftigerweise praktikabel, die hashCode Methode nach Klasse Object definierte zurückgibt verschiedene ganze Zahlen für verschiedene Objekte. (Diese Regel durch Umwandlung der internen Adresse des Objekts in eine ganze Zahl durchgeführt wird, aber diese Technik ist die Umsetzung nicht von der JavaTM-Programmiersprache erforderlich.)

Also für Sun JVM, wenn Sie die hashCode() Methode nicht tun außer Kraft setzen, dann ist es in der Tat die Speicheradresse des Objekts, aber es gibt keine Garantie, dass dies der Fall, so kann man nicht davon abhängen sollte.

Es gibt keine (real, zuverlässig) Art und Weise (das funktioniert auf jedem JVM) die Speicheradresse eines Objekts in reinem Java zu erhalten; Java keine Zeiger hat, und Referenzen sind nicht genau die gleiche wie Zeiger.

Abschnitt 4.3.2 der Java Virtual Machine Specification erklärt, was die [I Mittel; in diesem Fall bedeutet es, Ihre Variablen ein Array von int ist.

Andere Tipps

Von: Java: Syntax und Bedeutung hinter "[B @ 1ef9157"? Binary / Adresse?

  

Die hexadezimalen Ziffern sind eine Objekt-ID oder Hash-Code.

[I bedeutet, es ist ein Array ([) von ganzen Zahlen (I).

Sie die [I steht für die Klassennamen eines int-Array. die Nummer der Adresse im vm, aber da hashCode wird in der Regel außer Kraft gesetzt, es nicht klug ist, es zu verwenden, um direkt ein Objekt zu identifizieren. hierfür Verwendung System.identityHashcode (Object x), die den gleichen Wert auf eine zuverlässige Art und Weise zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top