Строка [] [] уточнение - PullRequest
0 голосов
/ 20 марта 2011

Я просто спрашиваю об этой инструкции:

String[][] s = new String[2][2];

Если я создам эту переменную "s", я создам таблицу строк с 2 строками и 2 столбцами? Или 2 таблицы с 2 элементами? Спасибо за это разъяснение.

Ответы [ 7 ]

3 голосов
/ 20 марта 2011

Создает двумерный массив с массивом из двух элементов в обоих измерениях.

В зависимости от единственного назначения переменной и данных, которые она на самом деле хранит, вы можете интерпретировать все, что угоднотак, как вы хотите.Таблица (матрица) с 2 столбцами и 2 строками вполне подойдет.

2 голосов
/ 20 марта 2011

Я думаю, что вы зациклены на этом одном истинном объяснении .

На самом деле, это много правильных объяснений или концептуальных моделей. Что из этого наиболее подходит / имеет смысл зависит от концептуального уровня , о котором вы думаете.

  • На уровне спецификации языка / JVM у вас есть массив массивов строк.

  • На уровне синтаксиса у вас есть нечто, похожее на двумерный массив строк со столбцами и строками. Для многих операций он будет вести себя точно так же, как двумерный массив.

    (Вы можете сделать так, чтобы ваша String [] [] не вела себя как обычный двумерный массив. Например, вы можете заменить строку, чтобы получить «массив», в котором строки имеют разную длину. Но это происходит только в том случае, если вы «назначаете» целую строку.)

  • На уровне приложения то, что у вас есть, можно рассматривать как таблицу ... если хотите.

Правильное объяснение, на которое вы ссылались в одном из ваших комментариев, равно как и все ответы. Все они говорят (или пытаются сказать) одно и то же.

(Кстати - это то, что говорит ответ @ BalusC. Я просто уточняю.)


Итак, когда вы спросите:

Если я создам эту переменную "s", я создам таблицу строк с 2 строками и 2 столбцами? Или 2 таблицы с 2 элементами?

... ответ в том, что это ОБА из них, в зависимости от вашей точки зрения и того, как ваше приложение использует их. С другой стороны, это также массив строк или двумерный массив строк.

2 голосов
/ 20 марта 2011

Java не имеет встроенной таблицы типа данных, единственными собственными базовыми типами типов (метатипами?) Являются

  • примитивных значений (числовые, char и логические)
  • массивы (линейные индексируемые наборы переменных одного типа).
  • объекты классов (в основном набор именованных переменных указанного типа вместе с некоторыми методами, фиксированными классом).(Строки являются примерами этого.)

Все остальное должно состоять из этих типов.(Чтобы усложнить это, все типы массивов считаются подтипами java.lang.Object, который является классом, от которого наследуются все другие классы.)

Таким образом, вы можете иметь массивы определенного класса, классы, которые имеют массив-типы как переменные класса (поля), а также массивы массивов, как здесь.

Ваш тип String[][] состоит из массивов массивов String, а выражение создания массива new String[2][2] создает массив длины двакаждый элемент сам по себе является массивом длины два.Каждый элемент этих массивов может быть строкой, но при создании он сначала null.

 s --> [ 0 ,  1 ]
         |    '----> [ null, null ]
         |
         '---------> [ null, null ]

Теперь вы можете поместить в места этих null s ссылки на фактические String объекты,если хотите, используя s[0][1] = "Hello"; и аналогичные операторы.

Как уже говорили другие авторы, такой 2D-массив можно просмотреть как таблицу со строками и столбцами, если хотите, но этоничего особенного с языковой точки зрения.

1 голос
/ 20 марта 2011

Это 2D массив. так же, как писать

String [][] s = new  String[2][];
s[0] = new String[2];
s[1] = new String[2];

Так что я думаю, что оба ваших варианта верны.

1 голос
/ 20 марта 2011

Нет таблицы.

Существует массив, массив - это просто ссылка на память, где переменные фактически хранятся.

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

1 голос
/ 20 марта 2011

Технически это создаст массив - длиной 2 - из строковых массивов - также длиной 2.

Но для всех практических целей его можно рассматривать как создание таблицы с 2 строками и 2 столбцами.

1 голос
/ 20 марта 2011

Вы создаете двумерный массив.Это массив массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...