Какой тип синтаксиса является инициализацией литерала массива Java "new Type [] {...}"? - PullRequest
0 голосов
/ 10 декабря 2018

Что привлекло мое внимание, которое я не могу объяснить себе, так это мысль об этом хорошо известном коде:

String[] str = new String[]{"a","b","c"};

Является ли new String[] приведением?Если это так, почему мы используем new, а не скобки?Мы будем приводить как:

float i = (float) 3;

Кажется, это также не конструктор, потому что тогда мы будем использовать его как вызов функции (например, new String[](...)).

Так что это за синтаксис, и есть ли у нас больше такого в Java?

Ответы [ 4 ]

0 голосов
/ 10 декабря 2018

Этот синтаксис является примером 10.6.Инициализатор массива как часть 15.10.1.Выражение создания массива .

Инициализатор массива может быть указан в объявлении поля (§8.3, §9.3) или объявлении локальной переменной (§14.4), или как часть выражения создания массива (§15.10.1), для создания массива и предоставления некоторых начальных значений .

new String[]

является выражением создания массива и

{"a","b","c"}

является инициализатором массива.

Поскольку в выражении создания массива нет выражения измерения (т. Е. Ничего в квадратных скобках), должен быть инициализатор массива:

Если нет выражений измерений, то должен быть инициализатор массива.Вновь выделенный массив будет инициализирован значениями, предоставленными инициализатором массива, как описано в §10.6.

0 голосов
/ 10 декабря 2018

Массивы могут быть созданы несколькими способами, как показано ниже, , и вы используете второй, называемый инициализатором массива, в котором вы создаете массив при его инициализации.

int[] abc = new int[3];   // This means an array of integers with size 3 is created.

int[] def = new int[]{1,2,3};   // This means an array of integers with size 3 is created and also initialized with the values 1, 2 and 3.

Во втором выражении я создаю массив целых чисел с элементами 1, 2 и 3, размер которых неявно равен 3.

Итак, в вашем случае String[] str = new String[]{"a","b","c"};, это утверждениесоздание массива значений String с элементами «a», «b» и «c» с неявным размером массива, равным 3 , из-за трех элементов, с которыми он инициализируется.

0 голосов
/ 10 декабря 2018

Синтаксис связан с инициализатором массива :

Инициализатор массива может быть указан в объявлении поля (§8.3, §9.3)или объявление локальной переменной (§14.4), или как часть выражения создания массива (§15.10.1), для создания массива и предоставления некоторых начальных значений .

В основномВы не только создаете массив, но и инициализируете все его поля в одной и той же инструкции.

Это не приведение.


Обратите внимание, что код:

String[] str = new String[]{"a","b","c"};

- это отдельная команда для создания и инициализации массива, но также возможно использование менее подробной версии:

String[] str = {"a","b","c"};
0 голосов
/ 10 декабря 2018

Он называется Инициализатор массива , и его единственная цель, как следует из названия, заключается в инициализации массивов.

...