2016-01-24 3 views
1
int[] []x[]; 

Я знаю, чтоКак int [] [] x [] объявление законного массива в Java?

int[] x; 
int x[]; 
int []x; 

и аналогичные объявляет массив прекрасно, но как 3 комплекта для кронштейнов, работают точно?

+1

Мое необразованное предположение будет объявлять массив двухмерных массивов ints. – sdsmith

+0

Никто не должен писать такой нечитаемый код. Я бы сказал int x [] [] []; было бы наименее удивительным. – duffymo

+1

@duffymo Рекомендуемый способ: 'int [] [] [] x' – Andreas

ответ

1

Вот пример:

int[][] array = new int[1][2]; 

Выше мы имеем двойной двумерный массив. Действительно, это массив массивов . Так объявить его следующим образом:

int[] array[] = new int[1][2]; 

Вы все еще объявляя массив массивов, иначе двойной размерного массива. это означает, что это:

int[] []array[] = new int[1][2][3]; 

То же самое, как это:

int[][][] array = new int[1][2][3]; 

Поскольку скобки после идентификатора массива («массива») были адаптированы для программистов C, они рассматриваются, как если бы они расположенный перед идентификатором.

Надеюсь, это поможет! :)

2

Несмотря на то, что следующие 3 означают то же самое, первый из них является рекомендуемым, поскольку тип из x представляет собой массив целых чисел.

int[] x; // Recommended 
int x[]; 
int []x; 

Таким образом, другой должен быть:

int[][][] x; 

который является массивом из массива из массива целых чисел.

В зависимости от того, как он используется, его можно рассматривать как трехмерный массив, например. см. Fundamentals of Multidimensional Arrays

Конечно, на самом деле Java не имеет многомерных массивов. Это, как было сказано выше, массив массива из целых чисел, и каждый подматрица может иметь разную длину. Но это более длинная тема.

+0

Почему это рекомендуется? есть ли причина, почему программисты практикуют размещение квадратных скобок сразу после переменной? – Doraemon

+0

См. [JLS 10.2. Переменные массива] (https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html#jls-10.2), где он говорит * «Скобки разрешены в деклараторах как кивок для традиции C и C++. "*. Как я уже сказал в ответ, '[]' делает тип массивом, поэтому его использование с базовым типом массива ('int') имеет смысл, например. 'int [] x' является переменной' x' типа 'int []'. В этом разделе JLS также указано * «Мы не рекомендуем« смешанную нотацию »в объявлении переменной массива, где скобки отображаются как в типе, так и в объявлениях« * », что и было сделано OP. – Andreas

4

Это законно, потому что Java Language Specification - 10.2. Array Variables это позволяет:

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

(курсив мой)

Так положить его просто int[] []x[]; такой же, как int[][][] x;.


Как правило, мы должны избегать смешанный способ размещения [] (или даже размещения [] после имени переменной).IMO это потому, что в Java мы привыкли декларирование переменных, как

FullTypeDescription variableName 

вместо

SomeTypeInfo variable RestOfTypeInformation 

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

Смешанный тип разрешено напишем такой код (чтобы C или C++ программисты мигрируют в Java проще): является предпочтительным

int[][] a, b[]; 

вместо

int[][] a; 
int[][][] b; 

, но по-прежнему последний путь.

+2

Немного дальше, связанный JLS говорит * «Мы не рекомендуем« смешанную нотацию »в объявлении переменной массива, где скобки появляются как в типе, так и в объявлениях« * », поэтому они фактически препятствуют использованию как« int [ ] [] x [] 'и' int [] [] a, b [] '. – Andreas