2013-12-05 2 views
12

Я много искал на веб-сайте, но не нашел никакого родственного вопроса. Поэтому я считаю, что это не дубликат.Java: Почему невозможно вернуть массив с помощью {..} без нового оператора?

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

  • 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

'{'a', 'b', 'c'}' не может существовать один в Java. В Java нет литералов массива. –

+0

@ LutzHorn Большое спасибо. – user3068966

ответ

9

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

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

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

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

Что касается вашего 4-го вопрос: они технически не являются «строителями» (который имеет особое значение в терминологии Java), но да, они оба строить массивы (или, возможно, более точно, они оба создают массивы).

+0

для 4-го вопроса: возможно, инициализаторы массива будут лучшим термином? –

+1

@ user503413 - Было бы, за исключением того, что терминология уже взята. (См. Мой ответ на первый вопрос.) Это оба выражения создания массива. –

+0

@TedHopp Вы очень хорошо ответили на мой вопрос. Спасибо – user3068966

3

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

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

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

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

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

Пример мной здесь: https://stackoverflow.com/a/19658726/1927832

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

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

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

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

2
  1. Syntactic Sugar
  2. компилятор заполняет его, потому что она способна вывести его
  3. Потому что на обратной линии языка не предусматривает, что syntactic sugar
1

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

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

третий: Я не могу получить свой квестинг

четвёртый: да оба конструкторы ....

1
char[ ] charAr=new char[10]; 

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

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

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

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

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

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

Смежные вопросы