Java: Почему не удается вернуть массив с помощью {..} без нового оператора?

Я много искал на веб-сайте, но не нашел никакого родственного вопроса. Поэтому я считаю, что это не дубликат.

Я знаю, что мы можем инициализировать массив тремя способами:

  • char[ ] charAr=new char[10];
  • char[ ] charAr={'a', 'b', 'c'};
  • char[ ] charAr=new char[]{'a','b','c'};

Первый вопрос: как называется {'a','b','c'} материал? Это называется литералами массива?

Второй вопрос: в чем разница между new char[]{'a','b','c'} с {'a','b','c'}?

Третий вопрос: почему я не могу вернуть вновь созданный массив с помощью {'a','b','c'}? Я должен вернуть new char[]{'a','b','c'}.

4-й вопрос: оба new char[10] и new char[]{'a','b','c'} являются конструкторами массива, правильно?

Ответ 1

В объявлении:

char[ ] charAr={'a', 'b', 'c'};

массив {'a', 'b', 'c'} называется инициализатором массива. Он описан в Раздел 10.6 Спецификации Java Language. Он может быть написан только так (без new char[] перед ним) как часть объявления переменной.

В любом другом месте (включая оператор return) вам нужно использовать выражение создания массива. Они описаны в разделе 15.10 JLS. Вы можете использовать либо инициализатор массива, либо выражение создания массива для инициализации переменной при ее объявлении. Поэтому new char[] представляется необязательным при объявлении переменной.

Относительно вашего вопроса 4 th: они технически не являются "конструкторами" (которые имеют определенное значение в терминологии Java), но да, они оба строят массивы (или, возможно, более точно, они оба создают массивы).

Ответ 2

1-й вопрос: что такое название {'a', 'b', 'c'}? Это называется литералами массива?

Нет символов массива в Java, они заполняют массив элементами, то есть инициализацией.

Второй вопрос: в чем разница между новыми char [] {'a', 'b', 'c'} с {'a', 'b', 'c'}?

Этот первый вызов называется объявлением массива *.

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

Пример от меня здесь: fooobar.com/questions/447889/...

Третий вопрос: почему я не могу вернуть вновь созданный массив с {'a', 'b', 'c'}? Я должен вернуть новый char [] {'a', 'b', 'c'}.

Потому что в первом случае тип отсутствует, а компилятор не знает, какой тип элементов он есть.

4-й вопрос: как новые char [10], так и новые char [] {'a', 'b', 'c'} - конструкторы массива, right?

Это создает массив символов с указанной длиной.

Ответ 4

Ответ на первый вопрос: - {a, b, c} - значения для присвоения массиву во время компиляции. Итак, имя файла - инициализация массива.... и это не литералы.

Ответ на второй вопрос: - Разница заключается в [] {a, b, c}, вызывающем параметризованный конструктор, и {a, b, c} просто интилилирует массив...

3rd: я не могу получить квест

4: да, оба являются конструкторами....

Ответ 5

char[ ] charAr=new char[10];

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

char[ ] charAr=new char[]{'a','b','c'};

Синтаксис, в котором вы выполняете как объявление, так и инициализацию в одной строке. Вы можете переназначить это на новый массив char.

char[ ] charAr={'a', 'b', 'c'};

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

Вы не можете возвращать литералы массива, потому что во время компиляции компилятор не знает тип возвращаемых элементов.