



Они семантически идентичны. Синтаксис int array[] был добавлен только для того, чтобы помочь программистам на C привыкнуть к java.
int[] array намного предпочтительнее и менее запутан.
@Andre - а в C - [] его часть декларатора, а не спецификатора объявления, отсюда и синтаксис int array[]. Тоже логично ... в некотором роде. :)
Си играет в эту маленькую игру :) И я нахожу это очаровательным :) Даже с подобными ... указателями. «Правильный» синтаксис c для указателей - int * imAPointer. Это глупо и аккуратно.
Для меня int array[] имеет больше смысла. Что вы думаете об этом заявлении? int[] x, y? y - это массив или нет? Может быть, а может и нет. Только гуру Java могут ответить с уверенностью ....
В случае int[] x, yy является массивом (поскольку [] принадлежит типу), а в случае int x[], yy не является массивом ([] принадлежит переменной).
@ScarletAmaranth Нет. С помощью C и указателей / * символ * может быть смежным либо с типом, либо с переменной (а не только с переменной, как вы, кажется, утверждаете). В C вы можете сказать int*imAPointer или int* imAPointer И в C, где вы можете сказать, что char *a и char* a оба верны ... потому что с char *aa имеет тип char. А с char* a a имеет тип char. Хотя на самом деле в C с массивами у вас есть только квадратные скобки после имени переменной. На Яве тоже. А в C# только после типа.
Есть ли способ объявить несколько массивов одного размера и типа (как это сделано здесь с помощью java) в C? например: int[10] a, b; будет означать целочисленные массивы a и b размером 10 каждый.
Я признаю, что это немного устаревшая тема, но я хочу сказать, что я не уверен в C, но я считаю, что этот ответ просто неверен в случае Java. Да, в большинстве случаев int[] arr; и int arr[] могут использоваться как взаимозаменяемые, но это не совсем одно и то же. Я отвечаю на этот вопрос здесь, откуда я видел ссылку на этот ответ .. что, опять же, я считаю не совсем верным.
В Java это просто разные синтаксические методы выражения одного и того же.
Они такие же. Один из них более читабелен (для некоторых), чем другой.
Они полностью эквивалентны. int [] array - предпочтительный стиль. int array[] предоставляется как эквивалент C-совместимого стиля.
Нет никакой разницы, но Sun рекомендует поставить его рядом с типом, как объяснено здесь
Две команды - это одно и то же.
Вы можете использовать синтаксис для объявления нескольких объектов:
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
Есть одно небольшое отличие, если вам случится объявить более одной переменной в одном объявлении:
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.
Между ними нет никакой разницы; оба объявляют массив int. Однако первый предпочтительнее, поскольку он хранит информацию о типе в одном месте. Последнее реально поддерживается только для программистов C / C++, переходящих на 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[][];
Нет никакой разницы.
Я предпочитаю формат type[] name, поскольку ясно, что переменная является массивом (меньше оглядывайтесь, чтобы узнать, что это такое).
Обновлено:
Ой, подождите, есть разница (я забыл, потому что я никогда не объявляю более одной переменной за раз):
int[] foo, bar; // both are arrays
int foo[], bar; // foo is an array, bar is an int.
Нет никакой реальной разницы; тем не мение,
double[] items = new double[10];
является предпочтительным, поскольку он ясно указывает на то, что тип является массивом.
double items [] действительно существует для программистов на C
@ Стив, должно быть, поэтому я продолжаю так делать. :-)
Можно привести контраргумент, что double items [] четко указывает тип, а затем, что items оказывается массивом - все зависит от того, что вам удобно.
Наиболее предпочтительный вариант - 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[][];
Таким образом, они приведут к одному и тому же байтовому коду.
Нет, это одно и то же. тем не мение
byte[] rowvector, colvector, matrix[];
эквивалентно:
byte rowvector[], colvector[], matrix[][];
Взято из Спецификация Java. Что означает, что
int a[],b;
int[] a,b;
разные. Я бы не рекомендовал ни одно из этих многочисленных заявлений. Легче всего (вероятно) читать:
int[] a;
int[] b;
Однако рекомендуется использовать одно объявление для каждого идентификатора вместо объявления нескольких идентификаторов в одной строке.
@rsp - Полностью согласен, отредактировал лучшую практику. Тем не менее, это наводит на мысль, что это хорошая практика.
Нет никакой разницы в функциональности между обоими стилями объявления. Оба объявляют массив int.
Но int[] a хранит информацию о типах вместе и более подробный, поэтому я предпочитаю его.
Оба имеют одинаковое значение. Однако наличие этих вариантов также позволяет:
int[] a, b[];
что то же самое, что:
int[] a;
int[][] b;
Однако это ужасный стиль кодирования, и его никогда не следует делать.
вы хотите сказать, int [] a, b []; b становится многомерным массивом
Ага, точно так же. Лично я предпочитаю
int[] integers;
потому что это делает очевидным для всех, кто читает ваш код, что целые числа представляют собой массив int, а не
int integers[];
что не делает все это очевидным, особенно если у вас есть несколько объявлений в одной строке. Но опять же, они эквивалентны, так что все сводится к личным предпочтениям.
Ознакомьтесь с эта страница о массивах в Java для более подробных примеров.
Оба в порядке. Я предлагаю выбрать один и придерживаться его. (Я делаю вторую)
Они одинаковы, но между этими утверждениями есть важное различие:
// 1.
int regular, array[];
// 2.
int[] regular, array;
в 1. regular - это просто int, в отличие от 2. где и regular, и array являются массивами int.
Поэтому второе утверждение, которое у вас есть, предпочтительнее, поскольку оно более ясное. Первая форма также не рекомендуется согласно это руководство по Oracle.
Спасибо всем! Я выберу второй и буду придерживаться его.
Хотя решение int integers[] основано на языке C (и поэтому может считаться «нормальным» подходом), многие люди считают int[] integers более логичным, поскольку он не позволяет создавать переменные разных типов (например, int и массив) в одном объявлении (как в отличие от декларации в стиле C).
Это альтернативная форма, заимствованная из 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 ), это тоже еще один вариант.
@nIcEcOw параметр varargs, например String... param, является массив
Возникает простое сомнение, если оба являются массивами, то есть String [] и String ... , then why it is not possible to call a method like say someMethod (1, 2) `, если кто-то определяет someMethod как someMethod ( int[] numbers ). Массивы требуют, чтобы аргумент был из непрерывной области памяти, хотя varargs сначала создаст массив из предоставленных аргументов. Более того, varargs может быть только последним аргументом метода, чего нельзя сказать о массиве.
@nIcEcOw, но вы можете вызывать varargs с массивом, т.е. meth(int... a) может называться как meth(1, 2), так и meth(new int[] {1, 2}). Varargs - это синтаксический сахар, который превращает первую версию во вторую. Фактический (байт-код) тип параметра - это тип массива. Что касается необходимости быть последним, если подумать, другого разумного выбора нет.
Оба одинаково действительны. Однако форма int puzzle[] не рекомендуется, int[] puzzle предпочтительнее в соответствии с соглашения о кодировании. См. Также официальный Руководство по массивам Java:
Similarly, you can declare arrays of other types:
byte[] anArrayOfBytes; short[] anArrayOfShorts; long[] anArrayOfLongs; float[] anArrayOfFloats; double[] anArrayOfDoubles; boolean[] anArrayOfBooleans; char[] anArrayOfChars; String[] anArrayOfStrings;You can also place the square brackets after the array's name:
float anArrayOfFloats[]; // this form is discouragedHowever, convention discourages this form; the brackets identify the array type and should appear with the type designation.
Обратите внимание на последний абзац.
Я рекомендую читать официальные руководства Sun / Oracle, а не некоторые сторонние. В противном случае вы рискуете изучить плохие практики.
От раздел 10.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[][];
Лично я почти все код Java, который я когда-либо видел, использует первую форму, что имеет больше смысла, поскольку вся информация о типе переменной хранится в одном месте. Если честно, мне бы не разрешили вторые формы ... но такова жизнь ...
К счастью, я не думаю, что Когда-либо видел этот (действительный) код:
String[] rectangular[] = new String[10][10];
Спасибо, я ломал голову над этим. Как ни странно, когда погуглил заголовок вопроса, я ничего не нашел ...
+1 Я согласен с запретом второй формы. +1 тоже, потому что я не понимал, что вы можете смешивать 'n' совпадений, таких как int[] a[]; - это никогда будет непонятно ;-)
при объявлении единственной ссылки на массив между ними нет большой разницы. поэтому следующие два объявления одинаковы.
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
Как уже говорилось, особой разницы нет (если вы объявляете только одну переменную в каждой строке).
Обратите внимание, что SonarQube рассматривает ваш второй случай как незначительный запах кода:
Array designators "[]" should be on the type, not the variable (squid:S1197)
Array designators should always be located on the type for better code readability. Otherwise, developers must look both at the type and the variable name to know whether or not a variable is an array.
Noncompliant Code Example
int matrix[][]; // Noncompliant int[] matrix[]; // NoncompliantCompliant Solution
int[][] matrix; // Compliant
[] Является частью ТИПА, а не ИМЕНИ. Для меня это самая большая разница.