Конструкция {}
называется инициализатором массива и используется для инициализации массива в Java. (Ссылка: Раздел 10.6: инициализаторы массива из Спецификация языка Java, третье издание .)
Причина, по которой передача {1, 2, 3}
сама по себе недопустима, заключается в том, что с инициализатором не связана информация о типе.
Следовательно, необходимо сообщить компилятору, что тип массива записывается в виде new Type[]
, где Type
- это тип, для которого создан массив.
Следующее допустимое использование инициализатора массива:
new String[] {"Hello, "World"}
new Character[] {'A', 'B'}
new Runnable[] {new Runnable() {public void run() {}}, new Runnable() {public void run() {}}
Как видно, эта нотация может использоваться для многих типов данных, поэтому она не является специфичной для целых чисел.
Что касается:
int[] a = {1, 2, 3};
Причина, по которой вышесказанное является действительным, заключается в том, что информация о типе предоставляется компилятору в объявлении типа переменной, которое в данном случае равно int[]
. Из сказанного выше вытекает следующее:
int[] a = new int[] {1, 2, 3};
Теперь, если у нас есть new int[] {1, 2, 3}
, мы можем создать новый массив int[]
, чтобы его можно было обрабатывать так же, как любой другой массив int[]
- просто у него нет имя переменной, связанной с ним.
Таким образом, массив, созданный new int[] {1, 2, 3}
, может быть отправлен в метод или конструктор, который принимает int[]
в качестве аргумента:
new Quicksort(new int[] {1, 2, 3}); // This will work.