10 votes

Initialisation avec caractère vs tableau de caractères

Cela imprime faux

List vowelsList=Arrays.asList(new char[]{'a','e','i','o','u'});
System.out.println(vowelsList.contains('a'));//false

Cela imprime vrai

List vowelsList=Arrays.asList(new Character[]{'a','e','i','o','u'});
System.out.println(vowelsList.contains('a'));//true

char est autoboxé en Character que j'avais utilisé dans l'initialiseur de tableau de caractères.. Pourquoi est-ce que j'obtiens des résultats différents !

10voto

jlordo Points 22012

Aussi imprimer

vowelsList.size();

pour les deux, et vous verrez la différence ;)

Indice :

Le type générique de la première méthode est char[], donc vous obtiendrez une liste de taille un. Son type est List. Le type générique de votre deuxième code est Character, donc votre liste aura autant d'entrées que le tableau. Le type est List.


Pour éviter ce genre d'erreur, ne pas utiliser des types bruts ! Le code suivant ne compilera pas:

List vowelsList = Arrays.asList(new char[]{'a','e','i','o','u'});

Les trois lignes suivantes sont correctes:

List list1 = Arrays.asList(new char[]{'a','e','i','o','u'}); // taille 1
List list2 = Arrays.asList(new Character[]{'a','e','i','o','u'}); // taille 5
List list3 = Arrays.asList('a','e','i','o','u'); // taille 5

1voto

AlexR Points 60796

Comme l'a dit @jlordo (+1), votre erreur réside dans la compréhension de ce que contient votre liste. Dans le premier cas, elle contient un élément de type char[], de sorte qu'elle ne contient pas l'élément char a. Dans le second cas, elle contient 5 éléments Character 'a', 'e', 'i', 'o', 'u', donc le résultat est true.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X