Pourquoi la méthode toString dans java semble pas fonctionner pour un tableau
Je veux convertir un tableau de caractères d'une chaîne de caractères de l'objet à 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 l'impression aléatoire charabia de l'aime de [C@6e1408 ou [C@e53108 chaque fois que le programme s'exécute. Je n'ai pas besoin d'une alternative de ce, mais veulent savoir pourquoi ce qui se passe.
Vous devez vous connecter pour publier un commentaire.
Pour obtenir un lisible par l'homme
toString()
, vous devez utiliserTableaux.toString()
, comme ceci:De Java
toString()
pour un tableau est à imprimer[
, suivie par un caractère représentant le type des éléments du tableau (dans votre casC
pourchar
), suivie par@
puis "l'identité de code de hachage" de la matrice (comme vous le feriez avec une "adresse mémoire").Ce triste état de choses est généralement considéré comme une "erreur" java.
Voir cette réponse pour une liste d'autres "erreurs".
toString()
n'était pas remplacé par un objet le traitement des caractères lisibles!Je ne sais pas d'où vous est venue l'idée qu ' "en principe" qu'il devrait imprimer "abcdef". Où est-ce documenté?
Quelque chose comme
[C@6e1408
est certainement pas aléatoire charabia - c'est la même manière de construire une chaîne de caractères à partir d'un objet que tout autre type qui n'a pas de remplacertoString()
hérite - c'est une représentation du type ([
indiquant un tableau;C
indiquant lachar
de type primitif), suivie par l'identité de code de hachage dans l'hex. Voir la documentation dede l'Objet.toString()
pour plus de détails. Il se trouve que les tableaux ne pas remplacertoString
.Si vous voulez
[a, b, c, d, e, f]
vous pouvez utiliserTableaux.toString(char[])
. Si vous voulezabcdef
vous pouvez utilisernew String(char[])
.toString()
méthode qu'il traite avec des personnages et lisible par l'homme, un contenu qui peut être délivrée à un valide et lisible de la chaîne. Ou à tout le moins, mettre en place quelque chose comme laArrays
classe, comme vous le soulignez. À partir de la première phrase de la documentation (comme je l'ai écrémé-il), je n'ai vu Renvoie un objet de type String représentant de ce Caractère de la valeur. que je devrait dire qu'il remplacetoString()
+ sorties d'un objet de type String avec une longueur de celle-ci; un lisible par l'homme de la représentation. Évidemment, ma mauvaise pour l'écrémage; mais quand même!Character.toString
. Ce n'est pas un seulchar
, c'est un array. Fondamentalement, vous devez compter que surtoString
faire quelque chose de particulièrement utile pour les classes où il a été remplacé, et il n'est pas remplacé pour les tableaux. C'est certainement une honte, mais l'OP n'avait aucune bonne raison de s'attendre à quelque chose de différent "en principe" de l'OMI.Suffit d'utiliser les commandes suivantes pour obtenir votre abcdef tableau imprimé
voilà, problème résolu !!
maintenant, concernant les raisons d'impression, les autres trucs je pense que ces gars-là au-dessus de mettre quelques liens utiles pour cela.
Ok je dois y aller !!
Parce qu'un char tableau est un tableau de primitives et toString() va vous donner c'est par défaut (qui est une table de hachage de l'objet). Certaines classes vont mettre en œuvre les méthodes toString() pour faire refroidisseur de choses, mais primitaves ne sera pas.
Tableaux de ne pas remplacer
toString
. Il y a une méthode statique:java.util.Arrays.toString
qui devrait résoudre votre problème.Le défaut de mise en œuvre de la méthode toString de la char [] classe renvoie une représentation sous forme de Chaîne de l'adresse de base du tableau, qui est ce qui est imprimé ici. Nous ne pouvons pas le changer, depuis la classe de char [] n'est pas extensible.
Elle doit imprimer
abcdef
.char[]
à unString
, et pas plus qu'à l'imprimer. Il a juste utilisé l'instruction print comme un "debug"-option pour afficher la sortie de.toString()
.Il y a une faute d'orthographe de Tableau.toString()" à "des Tableaux.toString(Tableau)" je pense que oui, et au lieu d'écrire le nom.toString(), passer le nom d'un argument et d'Écrire comme ci-dessus.
cette façon que j'ai trouvée travaillé: