[Ljava.lang.Object;
ist der Name für Object[].class
, der java.lang.Class
die Klasse des Arrays von darstellt Object
.
Das Namensschema ist dokumentiert in Class.getName()
:
Wenn dieses Klassenobjekt einen Referenztyp darstellt, der kein Array-Typ ist, wird der Binärname der Klasse zurückgegeben, wie in der Java-Sprachspezifikation ( §13.1 ) angegeben.
Wenn dieses Klassenobjekt einen primitiven Typ oder darstellt void
, ist der zurückgegebene Name das Java-Sprachschlüsselwort, das dem primitiven Typ oder entspricht void
.
Wenn dieses Klassenobjekt eine Klasse von Arrays darstellt, besteht die interne Form des Namens aus dem Namen des Elementtyps, dem ein oder mehrere '['
Zeichen vorangestellt sind , die die Tiefe der Array-Verschachtelung darstellen. Die Codierung von Elementtypnamen lautet wie folgt:
Element Type Encoding
boolean Z
byte B
char C
double D
float F
int I
long J
short S
class or interface Lclassname;
Ihre ist die letzte auf dieser Liste. Hier sind einige Beispiele:
// xxxxx varies
System.out.println(new int[0][0][7]); // [[[I@xxxxx
System.out.println(new String[4][2]); // [[Ljava.lang.String;@xxxxx
System.out.println(new boolean[256]); // [Z@xxxxx
Der Grund, warum die toString()
Methode für Arrays String
in diesem Format zurückgegeben wird, liegt darin, dass Arrays nicht @Override
die Methode übernehmen, von der geerbt wurde. Dies Object
wird wie folgt angegeben:
Die toString
Methode für die KlasseObject
gibt eine Zeichenfolge zurück, die aus dem Namen der Klasse besteht, für die das Objekt eine Instanz ist, dem Vorzeichen "@" und der hexadezimalen Darstellung des Hash-Codes des Objekts ohne Vorzeichen. Mit anderen Worten, diese Methode gibt eine Zeichenfolge zurück, die dem Wert von:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Hinweis : Sie können sich nicht darauf verlassen,toString()
dass ein beliebiges Objekt der obigen Spezifikation folgt, da sie es können (und normalerweise tun)@Override
, um etwas anderes zurückzugeben. Je zuverlässiger Wegdie Art eines beliebigen Objektsinspizieren ist aufzurufengetClass()
darauf (einefinal
Methode aus ererbtenObject
) und dann reflektiert auf dem zurückClass
Objekt. Im Idealfall sollte die API jedoch so konzipiert sein, dass keine Reflexion erforderlich ist (siehe Effective Java 2nd Edition, Punkt 53: Schnittstellen der Reflexion vorziehen ).
Auf einem "nützlicheren" toString
für Arrays
java.util.Arrays
bietet toString
Überladungen für primitive Arrays und Object[]
. Es gibt auch , deepToString
dass Sie für verschachtelten Arrays verwenden mögen.
Hier sind einige Beispiele:
int[] nums = { 1, 2, 3 };
System.out.println(nums);
// [I@xxxxx
System.out.println(Arrays.toString(nums));
// [1, 2, 3]
int[][] table = {
{ 1, },
{ 2, 3, },
{ 4, 5, 6, },
};
System.out.println(Arrays.toString(table));
// [[I@xxxxx, [I@yyyyy, [I@zzzzz]
System.out.println(Arrays.deepToString(table));
// [[1], [2, 3], [4, 5, 6]]
Es gibt auch Arrays.equals
und Arrays.deepEquals
diese führen neben vielen anderen Array-bezogenen Dienstprogrammmethoden einen Array-Gleichheitsvergleich durch ihre Elemente durch.
Verwandte Fragen