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?
Это создает массив символов с указанной длиной.
Ответ 3
Ответ 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.
Вы не можете возвращать литералы массива, потому что во время компиляции компилятор не знает тип возвращаемых элементов.