Java: Syntax und Bedeutung hinter "[B @ 1ef9157"? Binär / Adresse?
Hey, ich versuche, herauszufinden, was die [B@ - Präfix bedeutet in java. Sie kommen, wenn ich versuchen zu drucken byte-arrays. Aber byte-arrays der Größe 32 und Größe 4 sind identisch in der Länge. Immer "[@B1234567".
Was ist das? Auch haben Sie die Eigenschaft, nur drucken hex-Werte. Ich weiß, es kann nicht nur eine Binär-zu drucken, da zufällige erweiterten ascii-chars erscheinen würde.
Hier ist ein Beispiel für ein byte[] , byte[] Hash-Zuordnung print, wo die Zuordnungen werden durch einen Doppelpunkt getrennt, und diese sind byte-arrays aus 4-byte-Schlüssel und 32-byte-Elemente.
[B@1ef9157:[B@1f82982
[B@181ed9e:[B@16d2633
[B@27e353:[B@e70e30
[B@cb6009:[B@154864a
[B@18aaa1e:[B@3c9217
[B@20be79:[B@9b42e6
[B@16925b0:[B@14520eb
[B@8ee016:[B@1742700
[B@1bfc93a:[B@acb158
[B@107ebe1:[B@1af33d6
[B@156b6b9:[B@17431b9
[B@139b78e:[B@16c79d7
[B@2e7820:[B@b33d0a
[B@82701e:[B@16c9867
[B@1f14ceb:[B@89cc5e
[B@da4b71:[B@c837cd
[B@ab853b:[B@c79809
[B@765a16:[B@1ce784b
[B@1319c:[B@3bc473
Kommentar zu dem Problem
Als mit Arrays.toString() oder Arrays.deepToString() für die normal-Wert-Anzeige?
InformationsquelleAutor der Frage montooner | 2009-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Suchen Sie in der Objekt-ID, nicht einen dump der Inhalt.
Wenn die Absicht ist, drucken Sie den Inhalt des Arrays, es gibt viele Möglichkeiten. Zum Beispiel:
Einen komplette Liste der Typ Nomenklatur finden sich in der JNI-Dokumentation.
Hier ist die gesamte Liste:
L
und ein;
ist der vollständige Klassenname mit/
als Trennzeichen zwischen den Paketen (z.B.Ljava/lang/String;
)[
für jede dimension des Arrays(I)V
mit der zusätzlichen pseudo-Art derV
für void-MethodeInformationsquelleAutor der Antwort lavinio
[B@ bedeutet "byte-array". Andere primitive array-Typen haben unterschiedliche Präfixe:
Drucke:
Nicht-primitiven Typen sind der Typ-name nach
[L
zum Beispiel:Wenn Sie drucken möchten Sie den Inhalt eines byte-array als hex, hier ist etwas code, um Ihnen zu helfen:
InformationsquelleAutor der Antwort Jon Skeet
Den Standard -
toString()
Umsetzung ist der name der Klasse, gefolgt von '@', gefolgt von der des Objekts hash-code (in hexadezimal).Die Standard-hash-code, wiederum, ist "in der Regel umgesetzt durch die Umwandlung wird die interne Adresse des Objekts in eine Ganzzahl". In der Praxis, die Sun JVM verwendet die Adresse eines Objekts verarbeiten als Eingabe zum erstellen der Standard-hash-code.
Im Fall von primitiven Datentypen (
int
,char
usw.) - oder array-Typen wiebyte[]
Nennung der definierten Regeln in der Java Virtual Machine Specification für Feld-Deskriptoren verwendet werden. Nach diesen Regeln, einem '[' gibt ein array mit einer dimension, während " B " zeigt einen Komponententypbyte
.InformationsquelleAutor der Antwort erickson
Vermute ich, obwohl ich nicht weiß, dass der hex-Zeichenfolgen sind Repräsentationen der Instanzen die Adressen im Speicher, und haben wahrscheinlich wenig zu tun mit der Länge des arrays. Können Sie klären Ihre Frage?
InformationsquelleAutor der Antwort Tim Gilbert
Es erwähnenswert, dass das equals() von Object, so dass, wenn eine.equals(b) dann a == b ist. d.h. wenn Sie zwei byte-arrays, welche enthalten die gleichen Daten, sind Sie nicht equals() und nicht mit Schlüsseln in einer Hashtable, HashXxxx
InformationsquelleAutor der Antwort Peter Lawrey