Объявление и инициализация массива в 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[][][][];
Ответы
Ответ 1
Посмотрите JLS на массивах:
[]
может отображаться как часть типа в начале объявления или как часть декларатора для конкретной переменной или того и другого.
и
Кванты разрешены в деклараторах как знак традиций C и С++. Однако общие правила для объявления переменных допускают появление скобок в обоих типах и в объявлениях, так что объявление локальной переменной:
float[][] f[][], g[][][], h[]; // Yechh!
эквивалентно серии объявлений:
float[][][][] f;
float[][][][][] g;
float[][][] h;
Итак, например:
int []p, q[];
просто
int[] p, q[]
что на самом деле
int p[]; int q[][]
Все остальное похоже.
Ответ 2
Простой способ объявления переменной
type name
Итак, если тип int[]
, мы должны написать
int[] array
Никогда не пишите
int array[]
это тарабарщина (хотя она легальная)