Есть ли разница между «Object [] x» и «Object x []»? - PullRequest
8 голосов
/ 09 февраля 2010

Я обновлял унаследованную базу кода на Java и обнаружил следующую строку:

Object arg[] = { new Integer(20), new Integer(22) };

Эта строка привлекла мое внимание, потому что я привык к такому виду кода:

Object[] arg = { new Integer(20), new Integer(22) };

Содержимое массива здесь не важно. Мне любопытно, что квадратные скобки рядом с именем переменной сравниваются с квадратными скобками рядом с именем класса. Я пробовал в Eclipse (с Java 5), ​​и обе строки действительны для компилятора.

Есть ли разница между этими декларациями?

Ответы [ 5 ]

15 голосов
/ 09 февраля 2010

Оба легальны и оба работают. Но рекомендуется помещать [] перед именем массива.

С Javadocs :

Вы также можете поставить квадратные скобки после имени массива:

float anArrayOfFloats[]; // this form is discouraged

Однако конвенция препятствует этой форме; скобки обозначают тип массива и должны отображаться с обозначением типа.

14 голосов
/ 09 февраля 2010

Нет, они оба работают. Но будьте осторожны:

float anArrayOfFloats[], aSecondVariable;

объявит один массив с плавающей точкой и один с плавающей точкой, а:

float[] anArrayOfFloats, aSecondVariable;

объявит два массива с плавающей точкой.

4 голосов
/ 09 февраля 2010

Разницы нет. Оба законны.

Вы можете прочитать в спецификации языка Java http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html

[] может отображаться как часть типа в начале декларации, или как часть декларатора для конкретная переменная или оба, как в этот пример:

byte[] rowvector, colvector, matrix[];
1 голос
/ 09 февраля 2010

Еще одна веская причина написать Integer[] ints вместо Integer ints[] из-за наследственных отношений: Integer[] - это подтип Number[] - это подтип Object[].

Другими словами, вы можете поместить Integers в массив Object, чтобы вы могли думать о [] как о части определения типа объекта - вот почему имеет смысл располагать его близко к введите вместо имени объекта.

0 голосов
/ 09 февраля 2010

Краткий ответ: Нет.

...