Почему этот массив 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;