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?

Author: PM 77-1, 2014-12-29

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));
 4
Author: August, 2014-12-28 23:01:44

Il essaie d'imprimer un tableau.

Si vous voulez obtenir un résultat lisible, utilisez

System.out.println(Arrays.toString(a));
 0
Author: Emanuel S, 2014-12-28 23:02:50

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.toStringqui 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(", ");
    }
}
 0
Author: sol4me, 2014-12-28 23:11:06

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));
 0
Author: Pshemo, 2014-12-28 23:20:18