Je l’obtiens lorsque j’appelle toString
sur un objet que j’ai reçu d’un appel de fonction. Je sais que le type de l'objet est codé dans cette chaîne, mais je ne sais pas comment le lire.
Comment appelle-t-on ce type de codage?
[Ljava.lang.Object;
Est le nom de Object[].class
, Le Java.lang.Class
représentant la classe du tableau de Object
.
Le schéma de nommage est documenté dans Class.getName()
:
Si cet objet de classe représente un type de référence qui n'est pas un type de tableau, le nom binaire de la classe est renvoyé, comme indiqué par Java Spécification du langage ( §13.1 ).
Si cet objet de classe représente un type primitif ou
void
, le nom renvoyé est le mot-clé Java) correspondant au type primitif ouvoid
.Si cet objet de classe représente une classe de tableaux, la forme interne du nom est constituée du nom du type d'élément précédé d'un ou plusieurs caractères
'['
Représentant la profondeur d'imbrication du tableau. Le codage des noms de type d'élément est le suivant:Element Type Encoding boolean Z byte B char C double D float F int I long J short S class or interface Lclassname;
Le vôtre est le dernier sur cette liste. Voici quelques exemples:
// 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
La raison pour laquelle la méthode toString()
sur les tableaux renvoie String
dans ce format est due au fait que les tableaux ne @Override
Ne sont pas hérités de la méthode héritée de Object
, spécifiée par suit:
La méthode
toString
de la classeObject
renvoie une chaîne constituée du nom de la classe dont l'objet est une instance, le caractère de signe "@", et la représentation hexadécimale non signée du code de hachage de l'objet. En d'autres termes, cette méthode retourne une chaîne égale à la valeur de:getClass().getName() + '@' + Integer.toHexString(hashCode())
Remarque: vous ne pouvez pas compter sur la toString()
d'un objet quelconque pour suivre ce qui précède spécification, puisqu’ils peuvent (et le font généralement) @Override
le renvoyer. Le moyen le plus fiable d’inspecter le type d’un objet arbitraire est d’appeler getClass()
(méthode final
héritée de Object
) et then reflétant sur l'objet Class
renvoyé. Idéalement, cependant, l’API aurait dû être conçue de sorte que la réflexion ne soit pas nécessaire (voir Effective Java 2e édition, élément 53: Préférez les interfaces à la réflexion) .
toString
pour les tableauxJava.util.Arrays
fournit toString
surcharges pour les tableaux primitifs et Object[]
. Vous pouvez également utiliser deepToString
pour les tableaux imbriqués.
Voici quelques exemples:
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]]
Il existe également Arrays.equals
Et Arrays.deepEquals
Qui effectuent une comparaison d'égalité de matrice par leurs éléments, parmi de nombreuses autres méthodes utilitaires liées à la matrice.