2013-04-09 7 views
5

Dies druckt falschmit Character vs char-Array initialisieren

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

Dies druckt wahr

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

char ist autoboxed zu Character, die ich in char-Array initailizer..Why Uhr benutzt hatte, Ich bekomme unterschiedliche Ergebnisse!

+4

Weil 'char []' als ein einziger Parameter in den 'T ... params' betrachtet wird, während' Character [] 'Parameter als Array Parameter für' T ... params' betrachtet wird. –

+3

@LuiggiMendoza: das sollte eine Antwort sein. –

Antwort

6

drucken Auch

vowelsList.size();

für beide, und Sie werden den Unterschied sehen;)

Spoiler:

Der generische Typ des ersten Verfahrens ist char[], so Sie erhalten eine Liste der Größe eins. Es ist Typ List<char[]>. Der generische Typ Ihres zweiten Codes ist Character, daher enthält Ihre Liste so viele Einträge wie das Array. Der Typ ist List<Character>.


Um diese Art von Fehler zu vermeiden, verwenden Sie keine rohen Typen! Folgenden Code wird nicht kompilieren:

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

folgenden drei Zeilen sind in Ordnung:

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

netter Hinweis ... Bin doof! – Anirudha

+0

Jetzt sieht es gut aus –

1

Als @jlordo (+1) sagte Ihr Fehler ist, zu verstehen, was ist Ihre Liste enthalten. Im ersten Fall enthält es ein Element vom Typ char[], so dass es kein char Element a enthält. Im zweiten Fall enthält es 5 Character Elemente "a", "e", "i", "o", "u", so dass das Ergebnis true ist.