Объявление и инициализация массива в Java. Массивы ведут себя по-разному, когда позиция индексов индексов изменяется в их декларации

Ниже приведена очевидная и обычная декларация и инициализация массива в Java.

int r[], s[]; //<-------
r=new int[10];
s=new int[10];

Очень похожий случай ведет себя по-разному, когда позиция [] изменяется в заявлении объявления, как показано ниже.

int []p, q[]; //<-------
p=new int[10];
q=new int[10][10];

Пожалуйста, ознакомьтесь с декларацией. Положение [] изменено с r[] на []p. В этом случае массив q ведет себя как массив массивов типа int (который полностью отличается от предыдущего).

Вопрос: Почему q, в этом объявлении int []p, q[]; рассматривается как двухмерный массив?

Дополнительная информация:

Следующий синтаксис выглядит неуловимым.

int []a[];

Это, однако, соответствует тонкому и ведет себя как int a[][]; или int [][]a;.

Следовательно, все случаи действительны.

int [][]e[][][];
int [][][][][]f[][][][];
2 ответа

Посмотрите JLS на массивах:

[] может отображаться как часть типа в начале объявления или как часть декларатора для конкретной переменной или того и другого.

и

Кванты разрешены в деклараторах как знак традиций C и С++. Однако общие правила для объявления переменных допускают появление скобок в обоих типах и в объявлениях, так что объявление локальной переменной:

float[][] f[][], g[][][], h[]; // Yechh!

эквивалентно серии объявлений:

float[][][][] f;
float[][][][][] g;
float[][][] h;

Итак, например:

int []p, q[];

просто

int[] p, q[]

что на самом деле

int p[]; int q[][]

Все остальное похоже.


Простой способ объявления переменной

type name

Итак, если тип int[], мы должны написать

int[] array

Никогда не пишите

int array[]

это тарабарщина (хотя она легальная)

licensed under cc by-sa 3.0 with attribution.