2015-05-22 9 views
6

Perché quando uso questo codice,Java matrice primitiva List.contains non funziona correttamente

int[] array = new int[3]; 
array[0] = 0; 
array[1] = 1; 
array[2] = 2; 
System.out.println(Arrays.asList(array).contains(1)); 

emette falso. Ma quando uso questo codice,

Integer[] array = new Integer[3]; 
array[0] = 0; 
array[1] = 1; 
array[2] = 2; 
System.out.println(Arrays.asList(array).contains(1)); 

emette vero?

+0

Funziona come progettato e pubblicizzato da JLS. Solo perché non funziona come te * previsto * non significa che sia errato. Tienilo a mente quando scegli un titolo di domanda; se applichi la logica semplice: sto imparando una lingua che esiste da decenni e qualcosa non è come * I * si aspetta, è più probabile che la lingua sia sbagliata o è più probabile che io non capisca la lingua ancora? – Durandal

risposta

5

Arrays.asList(int[]) restituirà un List<int[]>, motivo per cui l'output è false.

Il motivo di questo comportamento è nascosto nella firma del metodo Arrays.asList(). È

public static <T> List<T> asList(T... a) 

Il varargs, internamente, è un array di oggetti (tipo ot T). Tuttavia, int[] non corrisponde a questa definizione, motivo per cui lo int[] viene considerato come un singolo oggetto.

frattempo, Integer[]può essere considerato come un array di oggetti di tipoT, perché comprende di oggetti (ma non primitive).

3

Arrays.asList(array) converte uno int[] in un List<int[]> con un singolo elemento (l'array di input). Pertanto, tale elenco non contiene 1.

D'altra parte, System.out.println(Arrays.asList(array).contains(array)); verrà stampato true per il primo snippet di codice.

+0

In altre parole, non si ottiene un 'List' con numeri interi, si ottiene un' List' con un elemento, che è l'array intero. – Jesper

Problemi correlati