Impression de tous les éléments d'un tableau dans une instruction println en Java
public class Test {
public static void main(String[] args) {
int[] a= new int[]{1,2,3};
System.out.println(a);
}
}
Je m'attendais à prendre une erreur de compilation ou d'exécution.J'ai pris un output.It " s " [I@1ba4806
".Quelle en est la raison en Java?
4 answers
C'est l'implémentation par défaut de toString()
dans Object
que vous voyez. Vous pouvez utiliser Arrays.toString
pour un lisible résultat (veillez à importer java.util.Arrays
):
System.out.println(Arrays.toString(a));
Il essaie d'imprimer un tableau.
Si vous voulez obtenir un résultat lisible, utilisez
System.out.println(Arrays.toString(a));
Devrait prendre une erreur de compilation ou d'exécution.J'ai pris un output.It ' s "[I@1ba4806".Quelle en est la raison en Java?
Parce qu'actuellement la méthode toString de la classe Object est invoquée, cela ressemble à ceci
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
C'est pourquoi vous voyez [I@1ba4806
Vous pouvez imprimer le contenu du tableau en utilisant Arrays.toString
qui est une méthode surchargée dans la classe Arrays pour imprimer le tableau.
System.out.println(Arrays.toString(a));
Pour les paramètres int[]
l'implémentation de la méthode ressemble comme
public static String toString(int[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(a[i]);
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}
J'ai pris un output.It " s "
[I@1ba4806
".Quelle en est la raison en Java?
out
le champ statique dans la classe System
est une instance de PrintStream
et il n'y a pas de méthode println(int[])
dans la classe PrintStream
qui itérerait pour vous sur tous les éléments du tableau passé et les imprimerait, mais il y a println(Object o)
qui essaie de convertir objet passé o
en chaîne qui sera ensuite imprimée.
Pour ce faire, cette méthode utilise la méthode String.valueOf(o)
qui, dans le cas de o
étant null, renverra Chaîne" null", ou dans le cas où o
n'est pas null (comme dans votre exemple), il renverra le résultat de la méthode toString()
invoquée à partir de l'objet passé. Donc System.out.println(a);
imprime le résultat de a.toString()
.
Maintenant, pourquoi le tableau a-t-il une méthode toString()
? Eh bien, il a été hérité de la classe Object
(car tous les tableaux étendent l'objet). De plus, les tableaux ne remplacent pas cette méthode et la laissent d'une manière telle qu'elle a été implémentée dans la classe Object
, donc son code ressemble à
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
, Qui comme vous le voyez retourne TypeName@hexadecimalHash
. Le tableau unidimensionnel d'entiers est représenté par [I
où le nombre de [
détermine le nombre de dimensions et I
représente le type int
.
Si vous souhaitez imprimer le contenu du tableau, vous devrez soit itérer sur tous les éléments et les imprimer
for (int i = 0; int < array.lenght; i++){
System.out.println(array[i]);
}
Ou
for (int element : array){
System.out.println(element);
}
OU vous pouvez utiliser la méthode Arrays.toString(int[])
, qui le fera pour vous et générera une chaîne sous forme [1, 2, 3, ....]
donc tout ce que vous auriez à faire est de l'imprimer comme
System.out.println(Arrays.toString(a));