Pourquoi la méthode toString() fonctionne différemment entre le Tableau et l'objet de liste de tableaux en Java
String[] array = {"a","c","b"};
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(array);
System.out.println(list);
Pour list
[a, b, c]
est sortie alors que pour array
certaines adresses est de sortie. Lorsque nous voulons à la sortie de la array
des valeurs, on peut utiliser Arrays.toString(array);
, qui fonctionne exactement comme list
.
Je me demande juste pourquoi on ne peut pas appeler toString()
directement sur array
pour obtenir les valeurs. N'est-il pas plus intuitive et pratique de le faire? Quels sont les résultats sur les différents traitements sur Array
et ArrayList
?
OriginalL'auteur Terry Li | 2012-12-08
Vous devez vous connecter pour publier un commentaire.
La principale différence entre un tableau et une liste de tableaux est qu'une arraylist est une classe qui est écrit en Java et a sa propre mise en œuvre (y compris la décision de remplacer
toString
) alors que les tableaux font partie de la spécification du langage lui-même. En particulier, la JLS 10.7 états:En d'autres mots, le langage de spécification empêche la
toString
méthode d'un tableau à être surchargée et il utilise donc la valeur par défaut de mise en œuvre définies dansObject
qui imprime le nom de la classe et hashcode.Pourquoi cette décision a été faite est une question qui devrait probablement être demandé aux concepteurs de la langue...
OriginalL'auteur assylias
Fait
toString
méthode est appelée sur l'objet array. Mais, depuis le type de tableau ne remplace pastoString
méthode deObject
classe, donc par défaut la mise en œuvre detoString
est invoquée, qui renvoie à la représentation de la forme que vous voyez.La représentation est de la forme: -
Dans votre cas, c'est quelque chose comme: -
Alors que, dans le cas de
ArrayList
cas, le remplacétoString
méthode dansArrayList
classe est appelée.OriginalL'auteur Rohit Jain
La réponse courte est parce que toString est définie dans un peu d'endroits différents, avec des comportements différents.
Les Tableaux de classe définit toString comme une méthode statique, être invoquée comme
Mais les Tableaux de classe hérite également de la non-statique méthode toString de la classe Object. Donc, si elle est appelée sur une instance, il appelle l'Objet.toString qui retourne une chaîne de caractères de la représentation de l'objet (par exemple: [Ljava.lang.Objet;@4e44ac6a)
Donc Des Tableaux.toString() et MyObject.toString() font appel à différentes méthodes avec le même nom.
La classe ArrayList hérite toString de la AbstractCollection classe, où il est un non méthode statique, donc peut être appelée sur l'objet comme:
Parce que c'est une représentation de chaîne de la collection, et non un objet, le résultat est à valeurs dans un format lisible comme [un, deux].
OriginalL'auteur danf
Parce que lorsque vous imprimez
toString()
, il sera par défaut de l'impressionclassName@HashCode
.Donc, lorsque vous imprimez
array
ci-dessus sera imprimé.Mais
ArrayList
est extened parAbstractCollection
classe et où letoString()
méthode est surchargée comme ci-dessousqui imprime le format lisible de la
ArrayList
objet.OriginalL'auteur Bhavik Ambani
C'est l'appel de la méthode toString pour ArrayList. Mais pour les Tableaux, vous ne pouvez pas trouver une telle.
OriginalL'auteur Suranga
Pour
array
toString() méthode qu'il imprime l'adresse de la mémoire. Mais dansArrayList
cette classe remplaceObject
toString() méthode .toString() de la mise en œuvre de ArrayList
OriginalL'auteur kannanrbk