Разница между массивом int [] и массивом int [] - PullRequest
214 голосов
/ 24 сентября 2008

Недавно я думал о разнице между двумя способами определения массива:

  1. int[] array
  2. int array[]

Есть ли разница?

Ответы [ 25 ]

256 голосов
/ 24 сентября 2008

Они семантически идентичны. Синтаксис int array[] был добавлен только для того, чтобы помочь программистам C привыкнуть к java.

int[] array гораздо предпочтительнее и менее запутан.

160 голосов
/ 24 сентября 2008

Есть одно небольшое отличие, если вам случится объявить более одной переменной в одном объявлении:

int[] a, b;  // Both a and b are arrays of type int
int c[], d;  // WARNING: c is an array, but d is just a regular int

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

52 голосов
/ 25 февраля 2009

Разницы нет.

Я предпочитаю формат type[] name, это ясно, что переменная является массивом (меньше оглядываясь, чтобы узнать, что это такое).

EDIT:

Ой, подождите, есть разница (я забыл, потому что я никогда не объявляю более одной переменной одновременно):

int[] foo, bar; // both are arrays
int foo[], bar; // foo is an array, bar is an int.
25 голосов
/ 02 октября 2010

Нет, это то же самое. Тем не менее

byte[] rowvector, colvector, matrix[];

эквивалентно:

byte rowvector[], colvector[], matrix[][];

Взято из Спецификация Java . Это означает, что

int a[],b;
int[] a,b;

разные. Я бы не рекомендовал ни одну из этих многочисленных деклараций. Легче всего читать (вероятно):

int[] a;
int[] b;
23 голосов
/ 23 сентября 2011

С раздел 10.2 спецификации языка Java :

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

 byte[] rowvector, colvector, matrix[];

Эта декларация эквивалентна:

byte rowvector[], colvector[], matrix[][];

Лично почти все код Java, который я когда-либо видел, использует первую форму, которая имеет больше смысла, храня всю информацию о типе переменной в одном месте. Хотелось бы, чтобы второй класс был запрещен, если честно ... но такова жизнь ...

К счастью, я не думаю, что когда-либо видел этот (действительный) код:

String[] rectangular[] = new String[10][10];
19 голосов
/ 24 сентября 2008

Две команды - это одно и то же.

Вы можете использовать синтаксис для объявления нескольких объектов:

int[] arrayOne, arrayTwo; //both arrays

int arrayOne[], intOne; //one array one int 

см .: http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html

13 голосов
/ 18 января 2009

Без разницы.

Цитата из Солнце :

[] может отображаться как часть типа в начале объявления, или как часть декларатора для определенной переменной, или обоих, как в этом примере: byte[] rowvector, colvector, matrix[];

Эта декларация эквивалентна: byte rowvector[], colvector[], matrix[][];

11 голосов
/ 25 февраля 2009

Реальной разницы нет; однако

double[] items = new double[10];

является предпочтительным, поскольку он четко указывает на то, что тип является массивом.

11 голосов
/ 18 января 2009

Нет никакой разницы между ними; оба объявляют массив int s. Тем не менее, первое предпочтительнее, поскольку оно хранит информацию о типе в одном месте. Последнее действительно поддерживается только для программистов на C / C ++, переходящих на Java.

7 голосов
/ 23 сентября 2011

Оба одинаково действительны. Форма int puzzle[], однако, не рекомендуется, int[] puzzle предпочтительнее в соответствии с соглашениями по кодированию . См. Также официальный учебник по Java-массивам :

Аналогично, вы можете объявлять массивы других типов:

byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;

Вы также можете поставить квадратные скобки после имени массива:

float anArrayOfFloats[]; // this form is discouraged

Однако конвенция препятствует этой форме; скобки обозначают тип массива и должны отображаться с обозначением типа.

Обратите внимание на последний абзац.

Я рекомендую читать официальные руководства Sun / Oracle, а не некоторые сторонние. В противном случае вы рискуете получить плохую практику.

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