Почему этот массив Java считается двумерным?

Рассмотрим этот код:

class arraytest {

    public static void main(String args[]) {

        int[] a = null , b[] = null;

        b = a;
        System.out.println( b );

    }

}

Линия

b = a;

помечен компилятором:

Incompatible types, found int[], required int [][]

Почему b считается двумерным? Я понимаю декларацию "shortcut"

int[] a = null , b[] = null;

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

Ответ 1

Возьмем этот пример:

int a, b;

Тогда оба a и b являются ints, правильно? Итак, возьмите это:

int[] a, b;

Оба a и b являются int-массивами. Итак, добавив еще один набор скобок:

int[] a, b[];

у вас есть добавлен другой набор скобок в b.

Любое из них было бы хорошо:

int[] a = null , b = null;
int a[] = null , b[] = null;

или, как вы говорите, просто положить их на отдельные строки тоже будет работать (и будет намного легче читать).

Ответ 2

int[] a = null , b[] =null;


.... оно равно:

int[] a = null;
int[][]b = null;

Вам нужно сделать:

int[] a = null , b =null;

Ответ 3

В дополнение к другим ответам Java не имеет многомерных массивов. Java имеет массивы любого типа. Этот "любой тип" может быть массивом. Многомерные массивы отличаются друг от друга, хотя и тонко.

Ответ 4

Если вы выведете объявление a, это то, что у вас есть:

int[] b[] = null;

который, к сожалению, является юридической альтернативой

int[][] b = null;

Ответ 5

Мне повезло, что синтаксис разрешения [] после b был единственным для толпы C-языков, которые чувствовали бы себя как дома. К сожалению, он имеет побочный эффект, позволяющий вводить путаные объявления, например

 int[] b[];

который заканчивается тем же, что и

 int[][] b;