2013-04-09 101 views
5

này in saiKhởi tạo với nhân vật vs mảng char

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

này in đúng

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

char được autoboxed để Character mà tôi đã sử dụng trong char mảng initailizer..Why am Tôi nhận được kết quả khác nhau!

+4

Vì 'char []' được coi là tham số đơn trong 'T ... params', trong khi tham số' Character [] 'được coi là tham số mảng cho' T ... params'. –

+3

@LuiggiMendoza: đó phải là câu trả lời. –

Trả lời

6

Cũng in

vowelsList.size();

cho cả hai, và bạn sẽ thấy sự khác biệt;)

Spoiler:

Các loại chung của phương pháp đầu tiên là char[], vì vậy bạn sẽ nhận được một danh sách kích thước một. Kiểu của nó là List<char[]>. Loại chung của mã thứ hai của bạn là Character, do đó danh sách của bạn sẽ có nhiều mục nhập làm mảng. Loại là List<Character>.


Để tránh nhầm lẫn này, không sử dụng các loại thô! Mã sau sẽ không biên dịch:

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

sau ba dòng cũng tốt:

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

gợi ý hay ... Cảm giác ngớ ngẩn! – Anirudha

+0

Bây giờ có vẻ tốt –

1

Như @jlordo (+1) cho biết sai lầm của bạn là trong việc tìm hiểu những gì hiện danh sách của bạn chứa. Trong trường hợp đầu tiên, nó chứa một phần tử thuộc loại char[], sao cho nó không chứa char phần tử a. Trong trường hợp thứ hai, nó chứa 5 Character yếu tố 'a', 'e', ​​'i', 'o', 'u', do đó kết quả là true.