2012-04-27 38 views
9

Tôi đã sau mã Java,Java Array Liệt kê Issue

int a[] = new int[] {20, 30} ; 
List lis = Arrays.asList(a) ; 
System.out.print(lis.contains(20)); 

Tuy nhiên, sản lượng là sai. Ai có thể giúp tôi, tại sao điều này không cho sự thật?

Trả lời

13

Những gì bạn nhận được không phải là danh sách các số nguyên mà là danh sách các mảng số nguyên, tức là List<int[]>. Bạn không thể tạo bộ sưu tập (như List) của các loại nguyên thủy.

Trong trường hợp của bạn, lis.contains(20) sẽ tạo đối tượng Integer với giá trị 20 và so sánh đối tượng đó với mảng int, rõ ràng không bằng nhau.

Hãy thử thay đổi kiểu của mảng để Integer và nó cũng làm việc:

Integer a[] = new Integer[] {20, 30} ; 
List lis = Arrays.asList(a) ; 
System.out.print(lis.contains(20)); 
+0

Làm chậm quá trình nhập chậm của tôi! (+1) –

+2

Cạm bẫy của varargs ... – Luciano

+0

Cảm ơn rất nhiều. Có cách nào khác để giải quyết vấn đề này không? Có nghĩa là chuyển đổi mảng trong như vậy, do đó có thể sử dụng phương pháp chứa và xóa? – Arpssss

1

Phương pháp asList tĩnh sử dụng như tham số varargs: .... Chỉ bằng cách yêu cầu <Integer> bạn ngăn chặn một List<Object> trong đó a là một đối tượng.

int[] a = new int[] {20, 30} ; 
List<Integer> lis = Arrays.asList(a) ; 
System.out.print(lis.contains(20));