Il {}
costrutto è chiamato un inizializzatore array, ed è usato per inizializzare un array in Java. (Riferimento: Section 10.6: Array Initializers da The Java Language Specification, Third Edition.)
Il motivo per cui il passaggio dello {1, 2, 3}
non è valido è perché non vi sono informazioni sul tipo associate all'inizializzatore.
Pertanto, è necessario consentire al compilatore di conoscere il tipo di matrice scrivendo new Type[]
, dove Type
è il tipo per il quale è fatto l'array.
I seguenti sono tutti uso valido del inizializzatore dell'array:
new String[] {"Hello, "World"}
new Character[] {'A', 'B'}
new Runnable[] {new Runnable() {public void run() {}}, new Runnable() {public void run() {}}
Come si vede, questa notazione può essere utilizzato per vari tipi di dati , quindi non è qualcosa che è specifico per i numeri interi.
quanto riguarda:
int[] a = {1, 2, 3};
Il motivo per cui sopra è valida perché l'informazione tipo viene fornita al compilatore nella dichiarazione del tipo variabile, che in questo caso è int[]
. Quello che il sopra è implicando è la seguente:
int[] a = new int[] {1, 2, 3};
Ora, se abbiamo new int[] {1, 2, 3}
, siamo in grado di creare un nuovo int[]
array in posizione, in modo che possono essere gestiti come qualsiasi altro int[]
serie sarebbe - è solo che non ha un nome di variabile associato ad esso.
Pertanto, la matrice creata da new int[] {1, 2, 3}
può essere inviato in un metodo o costruttore che prende un int[]
come argomento:
new Quicksort(new int[] {1, 2, 3}); // This will work.
In questo caso, quello che è diventato il linguaggio varargs (come java.util.Arrays.asList) originariamente avrebbe fatto proprio questo. Probabilmente è stato un errore cambiarlo ... –