Есть ли разница между "Object [] x" и "Object x []"?

Я обновлял базу устаревшего кода на Java, и я нашел такую ​​строку:

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

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

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

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

Есть ли разница между этими объявлениями?

Ответ 1

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

От Javadocs:

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

float anArrayOfFloats[]; // this form is discouraged

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

Ответ 2

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

float anArrayOfFloats[], aSecondVariable;

объявит один массив поплавков и один float, а:

float[] anArrayOfFloats, aSecondVariable;

объявит два массива поплавков.

Ответ 3

Нет никакой разницы. Оба являются законными.

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

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

byte[] rowvector, colvector, matrix[];

Ответ 4

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

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

Ответ 5

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