2013-04-09 14 views
5

Questo stampa falsoinizializzazione con carattere vs array di caratteri

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

Questo stampa vero

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

char è autoboxed a Character che avevo usato in char serie initailizer..Why am Ottengo risultati diversi!

+4

Poiché 'char []' è considerato come un singolo parametro nei 'T ... params', mentre il parametro' Character [] 'è considerato il parametro array per' T ... params'. –

+3

@LuiggiMendoza: quella dovrebbe essere una risposta. –

risposta

6

stampare anche

vowelsList.size();

per entrambi, e vedrete la differenza;)

Spoiler:

Il tipo generico del primo metodo è char[], così otterrai un elenco di dimensioni uno. Il tipo è List<char[]>. Il tipo generico del secondo codice è Character, quindi l'elenco avrà tutte le voci dell'array. Il tipo è List<Character>.


Per evitare questo tipo di errore, non utilizzare i tipi non elaborati! Seguente codice non compilare:

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

seguenti tre righe vanno bene:

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

bel suggerimento ... Mi sento stupido! – Anirudha

+0

Ora sembra buono –

1

Come @jlordo (+1) ha detto il tuo errore è nella comprensione di ciò che fa l'elenco contiene. Nel primo caso contiene un elemento di tipo char[], in modo che non contenga l'elemento chara. Nel secondo caso contiene 5 Character elementi 'a', 'e', ​​'i', 'o', 'u', quindi il risultato è true.

Problemi correlati