Разница между массивом int[] и массивом int[]

StackOverflow https://stackoverflow.com/questions/129178

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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.

Нет никакой разницы.

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

РЕДАКТИРОВАТЬ:

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

int[] foo, bar; // both are arrays
int foo[], bar; // foo is an array, bar is an int.

Нет, это одно и то же.Однако

byte[] rowvector, colvector, matrix[];

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

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

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

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

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

int[] a;
int[] b;

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

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

 byte[] rowvector, colvector, matrix[];

Это объявление эквивалентно:

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

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

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

String[] rectangular[] = new String[10][10];

Эти две команды — одно и то же.

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

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

Нет разницы.

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

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

Это объявление эквивалентно: byte rowvector[], colvector[], matrix[][];

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

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

double[] items = new double[10];

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

Оба одинаково действительны.А 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, а не сторонние руководства.В противном случае вы рискуете научиться плохим практикам.

Это альтернативная форма, заимствованная из C, на котором основана Java.

В качестве любопытства есть три способы определения действительного main метод в Java:

  • public static void main(String[] args)
  • public static void main(String args[])
  • public static void main(String... args)

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

Наиболее предпочтительным вариантом является int[] a - потому что int[] это тип и a это имя.(ваш второй вариант такой же, но с неуместным пробелом)

Функционально разницы между ними нет.

А Спецификация языка Java говорит:

The [] may appear as part of the type at the beginning of the declaration,
or as part of the declarator for a particular variable, or both, as in this
example:

byte[] rowvector, colvector, matrix[];

This declaration is equivalent to:

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

Таким образом, они приведут к точно такому же байтовому коду.

В Java это просто разные синтаксические способы сказать одно и то же.

Они такие же.Один более читаем (для некоторых), чем другой.

Они полностью эквивалентны. int [] array является предпочтительным стилем. int array[] просто предоставляется как эквивалентный C-совместимый стиль.

Оба имеют одно и то же значение.Однако существование этих вариантов позволяет и это:

int[] a, b[];

что то же самое, что:

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

Однако это ужасный стиль кодирования, и его никогда не следует делать.

Между обоими стилями объявления нет разницы в функциональности.Оба объявляют массив int.

Но int[] a хранит информацию о типах вместе и является более подробным, поэтому я предпочитаю его.

Они одинаковы, но между этими утверждениями есть важное различие:

// 1.
int regular, array[];
// 2.
int[] regular, array;

в 1.Regular — это просто целое число, а не 2.где и обычный, и массив представляют собой массивы целых чисел.

Поэтому второе утверждение, которое у вас есть, предпочтительнее, поскольку оно более ясно.Первая форма также не рекомендуется согласно это руководство по Oracle.

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

Обратите внимание, что СонарКуб рассматривает ваше второе дело как несовершеннолетнее код запах:

Обозначения массива «[]» должны относиться к типу, а не к переменной (squid:S1197).

Устройства массива всегда должны быть расположены на типе для лучшей читаемости кода.В противном случае разработчики должны смотреть как на тип, так и на имя переменной, чтобы узнать, является ли переменная массивом.

Пример несовместимого кода

int matrix[][];   // Noncompliant
int[] matrix[];   // Noncompliant

Соответствующее решение

int[][] matrix;   // Compliant

Да, точно так же.Лично я предпочитаю

int[] integers; 

потому что для любого, кто читает ваш код, сразу становится очевидным, что целые числа представляют собой массив целых чисел, а не

int integers[];

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

Проверить эта страница о массивах в Java для более подробных примеров.

при объявлении одной ссылки на массив между ними нет большой разницы.поэтому следующие два объявления одинаковы.

int a[];  // comfortable to programmers who migrated from C/C++
int[] a;  // standard java notation 

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

int a[],b[],c[]; // three array references
int[] a,b,c;  // three array references

Оба в порядке.Я предлагаю выбрать один и придерживаться его.(я делаю второй)

В то время int integers[] корни решения лежат в языке C (и поэтому его можно считать «нормальным» подходом), многие люди находят int[] integers более логично, поскольку не позволяет создавать переменные разных типов (т.е.int и массив) в одном объявлении (в отличие от объявления в стиле C).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top