La construcción {}
se llama un inicializador de matriz, y se utiliza para inicializar un array en Java. (Referencia: Section 10.6: Array Initializers de The Java Language Specification, Third Edition.)
La razón por la que pasa {1, 2, 3}
sí no es válida se debe a que no hay información de tipo asociado con el inicializador.
Por lo tanto, uno debe dejar que el compilador sepa el tipo de matriz al escribir new Type[]
, donde Type
es el tipo para el que está hecha la matriz.
Los siguientes son todo uso válido de la inicializador array:
new String[] {"Hello, "World"}
new Character[] {'A', 'B'}
new Runnable[] {new Runnable() {public void run() {}}, new Runnable() {public void run() {}}
Como puede verse, esta notación se puede utilizar para muchos tipos de datos , así que no es algo específico para enteros.
cuanto a:
int[] a = {1, 2, 3};
La razón por la cual lo anterior es válido, porque es el tipo de información se proporciona al compilador en la declaración de tipo variable, que en este caso es int[]
. Lo anterior da a entender es la siguiente:
int[] a = new int[] {1, 2, 3};
Ahora, si tenemos new int[] {1, 2, 3}
, somos capaces de crear una nueva int[]
matriz en su lugar, por lo que se pueden manejar como cualquier otro int[]
gama haría - es sólo que no tiene un nombre de variable asociado.
Por lo tanto, la matriz creada por new int[] {1, 2, 3}
puede ser enviado en un método o constructor que toma un int[]
como su argumento:
new Quicksort(new int[] {1, 2, 3}); // This will work.
Como sucede, lo que se convirtió en las características del lenguaje varargs (como java.util.Arrays.asList) originalmente iba a hacer precisamente eso. Probablemente fue un error cambiarlo ... –