web-dev-qa-db-fra.com

Java: println avec le tableau char donne du charabia

Voici le problème. Ce code:

String a = "0000";
 System.out.println(a);
char[] b = a.toCharArray();
 System.out.println(b);

retour

 0000 
 0000 


Mais ce code:

String a = "0000";
 System.out.println("String a: " + a);
char[] b = a.toCharArray();
 System.out.println("char[] b: " + b);

retour

 Chaîne a: 0000 
 Char [] b: [C @ 56e5b723 


Que se passe-t-il dans le monde? Semble qu'il devrait y avoir une solution assez simple, mais je n'arrive pas à le comprendre.

25
stephenwade

Quand tu dis

System.out.println(b);

Il en résulte un appel à print(char[] s) puis println()

Le JavaDoc pour print(char[] s) dit:

Imprimez un tableau de caractères. Les caractères sont convertis en octets conformément au codage de caractères par défaut de la plate-forme, et ces octets sont écrits exactement à la manière de la méthode write (int).

Il effectue donc une impression octet par octet.

Quand tu dis

System.out.println("char[] b: " + b);

Il en résulte un appel à print(String), et donc ce que vous faites réellement est d'ajouter à un String un Object qui invoque toString() sur le Object - comme pour tous les Object par défaut, et dans le cas d'un Array, imprime la valeur de la référence (l'adresse mémoire).

Vous pourriez faire:

System.out.println("char[] b: " + new String(b));

Notez que c'est "faux" dans le sens où vous ne faites pas attention à l'encodage et utilisez la valeur par défaut du système. Apprenez à coder le plus tôt possible.

28
Doug Moscrop
System.out.println("char[] b: " + b);

C'est comme

System.out.println(("char[] b: " + b.toString());

Vous pouvez rechercher "Object.toString ()"

5
chenyun

Utilisation

System.out.println("char[] b: " + Arrays.toString(b));

Le gibrish que vous obtenez est le nom de la classe suivi de l'adresse mémoire de l'objet. Un problème se produit lorsque vous essayez d'ajouter b avec une chaîne char[] b: dans ce cas, la méthode char array b.toString () est appelée ainsi [C @ 56e5b723 est imprimé.

[indique qu'il s'agit d'un tableau C indique la classe dans ce cas char @ 56e5b723 indique l'emplacement de la mémoire

4
shazin

La méthode toString() d'un tableau (qui est appelée lorsque vous faites "..." + b) Est uniquement destinée à fournir une sortie de débogage. Il n'y a pas de cas particulier où la toString() d'une char[] Vous donnera la chaîne d'origine - les tableaux de tous les types ont la même implémentation toString().

Si vous souhaitez obtenir la chaîne d'origine du tableau char, utilisez:

String a2 = new String(b);
4
millimoose

Utilisez la ligne 3: e!

Scanner input = new Scanner(System.in);
char[] txt = input.next().toCharArray();
System.out.println((char[])txt);
1
user1991275