Відповіді:
Вони семантично однакові. int array[]
Синтаксис був доданий тільки програмістам допомоги C звикає до Java.
int[] array
набагато кращий і менш заплутаний.
int array[]
синтаксис. Також логічно ... певним чином викривленим. :)
int array[]
має більше сенсу для мене. Що ви думаєте про цю декларацію? int[] x, y
? Є чи y
масив чи ні? Може, і є, може, і ні. Лише гуру Java можуть впевнено відповісти ....
int[] x, y
, y
є масив (тому що []
належить до типу), а у випадку int x[], y
, y
- не масив ( []
належить до змінної).
Існує одна незначна різниця, якщо вам здається оголосити більше однієї змінної в одній декларації:
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[] a[];
- це ніколи не буде незрозумілим ;-)
Дві команди - це одне і те ж.
Ви можете використовувати синтаксис для оголошення кількох об'єктів:
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
Без різниці.
Цитування від Sun :
Вони
[]
можуть відображатися як частина типу на початку декларації, або як частина декларатора для певної змінної або обох, як у цьому прикладі:byte[] rowvector, colvector, matrix[];
Ця декларація еквівалентна:
byte rowvector[], colvector[], matrix[][];
Нема різниці між ними; обидва оголошують масив int
s. Однак перший є кращим, оскільки він зберігає інформацію про тип в одному місці. Останнє реально підтримується лише на користь програмістів на 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)
public static void main ( String \u005B \u005D args )
, це теж інший варіант.
String... param
, це масив
, then why it is not possible to call a method like say
someMethod (1, 2) `, якщо один визначає someMethod
як someMethod ( int[] numbers )
. Масиви вимагають, щоб аргумент повинен бути з суміжного місця пам'яті, однак varargs
, спочатку зробить масив із наданих аргументів. Більше того, a varargs
може бути лише остаточним аргументом методу, хоча те ж саме не стосується масиву.
meth(int... a)
можна викликати як або, meth(1, 2)
або meth(new int[] {1, 2})
. Вараргс - синтаксичний цукор, який перетворює першу версію на другу. Фактичний (байт-код) тип параметра - це тип масиву. Що стосується того, щоб бути останнім, якщо подумати над цим, іншого іншого розумного вибору немає.
Специфікація мови 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[][];
Таким чином, вони отримають точно такий же байт-код.
Вони абсолютно рівноцінні. int [] array
є кращим стилем. int array[]
просто надається як еквівалентний C-сумісний стиль.
Обидва мають однакове значення. Однак існування цих варіантів також дозволяє це:
int[] a, b[];
що те саме, що:
int[] a;
int[][] b;
Однак це жахливий стиль кодування і його ніколи не слід робити.
Вони однакові, але між цими твердженнями є важлива різниця:
// 1.
int regular, array[];
// 2.
int[] regular, array;
в 1. regular - це лише int, на відміну від 2. де регулярний і масив є масивами int.
Тому друге твердження, яке ви маєте, є кращим, оскільки воно є більш зрозумілим. Перша форма також не відлякує відповідно до цього підручника з Oracle .
Як уже було сказано, різниці немає (якщо ви оголошуєте лише одну змінну на рядок).
Зауважте, що SonarQube трактує ваш другий випадок як незначний запах коду:
Позначення масиву "[]" має бути типу, а не змінної (squid: S1197)
Для кращої читабельності коду завжди повинні розташовуватися позначення типу масиву. В іншому випадку розробники повинні дивитися як на тип, так і на ім'я змінної, щоб знати, чи є змінною масив чи ні.
Приклад невідповідного коду
int matrix[][]; // Noncompliant int[] matrix[]; // Noncompliant
Сумісне рішення
int[][] matrix; // Compliant
Так, точно так само. Особисто я віддаю перевагу
int[] integers;
тому що це робить очевидним для кожного, хто читає ваш код, що цілі числа - це масив int, на відміну від
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