web-dev-qa-db-fra.com

Pourquoi la méthode à suivre en Java ne semble pas fonctionner pour un tableau

Je souhaite convertir un tableau de caractères en objet chaîne à l'aide de la méthode toString () en Java. Voici un extrait du code de test que j'ai utilisé:

import Java.util.Arrays;
class toString{
    public static void main(String[] args){
        char[] Array = {'a', 'b', 'c', 'd', 'e', 'f'};
        System.out.println(Array.toString());
        }
}

En principe, il devrait imprimer abcdef , mais c'est un charabia aléatoire de type [C @ 6e1408 ou [C @ e53108 à chaque exécution du programme. Je n'ai pas besoin d'une alternative, mais je veux savoir pourquoi cela se produit.

33
sidharth sharma

Pour obtenir une toString() lisible par l'homme, vous devez utiliser Arrays.toString() , comme ceci:

System.out.println(Arrays.toString(Array));

La toString() de Java pour un tableau doit imprimer [, suivi d'un caractère représentant le type des éléments du tableau (dans votre cas C pour char), suivi de @ puis du "code de hachage d'identité" du tableau (pensez-y comme vous le feriez une "adresse mémoire").

Cette triste situation est généralement considérée comme une "erreur" avec Java.

Voir cette réponse pour une liste d’autres "erreurs". 

34
Bohemian

Je ne sais pas où vous avez eu l'idée qu'en "en principe" il faudrait imprimer "abcdef". Où est-ce documenté?

Quelque chose comme [C@6e1408 est certainement pas charabia aléatoire - c'est la même façon de construire une chaîne à partir d'un objet que tout autre type qui ne remplace pas toString() hérite - c'est une représentation du type ([ indiquant un tableau; C indiquant le type primitif char) suivi du code de hachage d'identité au format hexadécimal. Consultez la documentation pour Object.toString() pour plus de détails. Dans ce cas, les tableaux ne remplacent pas toString.

Si vous voulez [a, b, c, d, e, f], vous pouvez utiliser Arrays.toString(char[]) . Si vous voulez abcdef, vous pouvez utiliser new String(char[]).

32
Jon Skeet

Utilisez simplement les commandes suivantes pour imprimer votre tableau abcdef

    String a= new String(Array);

    System.out.println(a);

voilà le problème résolu !! maintenant en ce qui concerne pourquoi l’impression des autres éléments, je pense que ces gars ci-dessus ont mis des liens utiles pour cela . Ok il faut y aller !!

2
jhkj

Parce qu'un tableau de caractères est un tableau de primitives et toString () vous donnera sa valeur par défaut (qui est un hachage de l'objet). Certaines classes implémenteront toString () pour faire des choses plus cool, mais les primitaves ne le feront pas.

1
Jon7

Les tableaux ne remplacent pas toString. Il existe une méthode statique: Java.util.Arrays.toString qui devrait résoudre votre problème.

import Java.util.Arrays;
class toString {
    public static void main(String[] args){
        char[] Array = {'a', 'b', 'c', 'd', 'e', 'f'};
        System.out.println(Arrays.toString(Array));
    }
}
1
Brigham

L'implémentation par défaut de la méthode toString de la classe char [] renvoie une représentation sous forme de chaîne de l'adresse de base du tableau, qui correspond à ce qui est imprimé ici. Nous ne pouvons pas le changer, car la classe de char [] n'est pas extensible.

0
Swaranga Sarma
char[] Array = { 'a', 'b', 'c', 'd', 'e', 'f' };
System.out.println(Array);

Il devrait imprimer abcdef.

0
Khanh Tran

Il y a une erreur d'orthographe de "Array.toString ()" à "Arrays.toString (Array)", je suppose, et au lieu d'écrire name.toString (), transmettez le nom en tant qu'argument et écrivez comme ci-dessus.

0
Harshul