Odpowiedzi:
Są semantycznie identyczne. int array[]Składnia dodano tylko do pomocy programistów C przyzwyczaić do java.
int[] array jest o wiele bardziej preferowane i mniej mylące.
int array[]składnia. Również logiczne ... w jakiś pokręcony sposób. :)
int array[]ma dla mnie więcej sensu. Co sądzisz o tej deklaracji? int[] x, y? Jest ytablicą czy nie? Może tak, a może nie. Tylko guru Java mogą odpowiedzieć z pewnością ....
int[] x, y, yjest tablicą (ponieważ []należy do typu), aw przypadku int x[], y, ynie jest tablicą ( []należy do zmiennej).
Jest jedna drobna różnica, jeśli zdarza się, że deklarujesz więcej niż jedną zmienną w tej samej deklaracji:
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
Zauważ, że jest to zły styl kodowania, chociaż kompilator prawie na pewno złapie twój błąd w momencie, gdy spróbujesz go użyć d.
Nie ma różnicy.
Wolę type[] nameformat jest jasne, że zmienna jest tablicą (mniej rozglądając się, aby dowiedzieć się, co to jest).
EDYTOWAĆ:
Och, czekaj, jest różnica (zapomniałem, ponieważ nigdy nie deklaruję więcej niż jednej zmiennej na raz):
int[] foo, bar; // both are arrays
int foo[], bar; // foo is an array, bar is an int.
Nie, są takie same. jednak
byte[] rowvector, colvector, matrix[];
jest równa:
byte rowvector[], colvector[], matrix[][];
Zaczerpnięte ze specyfikacji Java . Oznacza to, że
int a[],b;
int[] a,b;
są różne. Nie poleciłbym żadnej z tych wielokrotnych deklaracji. Najłatwiejszy do odczytania to (prawdopodobnie):
int[] a;
int[] b;
Z sekcji 10.2 specyfikacji języka Java :
[] Może pojawić się jako część typu na początku deklaracji lub jako część deklaratora dla określonej zmiennej, lub obu, jak w tym przykładzie:
byte[] rowvector, colvector, matrix[];Ta deklaracja jest równoważna z:
byte rowvector[], colvector[], matrix[][];
Osobiście prawie wszyscy kod Java, jaki kiedykolwiek widziałem, używa pierwszej formy, co ma większy sens, ponieważ wszystkie informacje o zmiennej są przechowywane w jednym miejscu. Chciałbym, żeby druga forma została niedozwolona, szczerze mówiąc ... ale takie jest życie ...
Na szczęście chyba nie widziałem tego (poprawnego) kodu:
String[] rectangular[] = new String[10][10];
int[] a[];- to nigdy nie będzie niejasne ;-)
Dwa polecenia są takie same.
Możesz użyć składni do zadeklarowania wielu obiektów:
int[] arrayOne, arrayTwo; //both arrays
int arrayOne[], intOne; //one array one int
patrz: http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html
Bez różnicy.
Cytowanie z Sun :
[]Może pojawić się jako część typu na początku zgłoszenia, lub jako część declarator dla danej zmiennej, lub jedno i drugie, jak w poniższym przykładzie:byte[] rowvector, colvector, matrix[];Ta deklaracja jest równoważna z:
byte rowvector[], colvector[], matrix[][];
Nie ma między nimi żadnej różnicy; oba deklarują tablicę ints. Jednak ta pierwsza jest preferowana, ponieważ utrzymuje informacje o typie w jednym miejscu. To ostatnie jest obsługiwane tylko dla programistów C / C ++ przechodzących na Javę.
Nie ma prawdziwej różnicy; jednak,
double[] items = new double[10];
jest preferowany, ponieważ wyraźnie wskazuje, że typ jest tablicą.
Oba są jednakowo ważne. int puzzle[]Forma jest jednak zniechęcać The int[] puzzlejest korzystne według standardy kodowania . Zobacz także oficjalny samouczek dotyczący tablic Java :
Podobnie możesz zadeklarować tablice innych typów:
byte[] anArrayOfBytes; short[] anArrayOfShorts; long[] anArrayOfLongs; float[] anArrayOfFloats; double[] anArrayOfDoubles; boolean[] anArrayOfBooleans; char[] anArrayOfChars; String[] anArrayOfStrings;Możesz również umieścić nawiasy kwadratowe po nazwie tablicy:
float anArrayOfFloats[]; // this form is discouragedJednak konwencja odradza tę formę; nawiasy kwadratowe określają typ tablicy i powinny pojawić się wraz z oznaczeniem typu.
Zwróć uwagę na ostatni akapit.
Zalecam przeczytanie oficjalnych samouczków Sun / Oracle, a nie niektórych zewnętrznych. W przeciwnym razie zaryzykowałbyś, ucząc się złych praktyk.
Jest to forma alternatywna, z której została zapożyczona C, na której oparta jest Java.
Ciekawostką są trzy sposoby zdefiniowania prawidłowej mainmetody w 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 )jest to również inny wariant.
String... param, jest tablicą
, then why it is not possible to call a method like say someMethod (1, 2) `jeśli definiuje się someMethodjako someMethod ( int[] numbers ). Tablice wymagają jednak, aby argument musiał pochodzić z ciągłego miejsca w pamięci, ale varargsnajpierw utworzy tablicę z podanych argumentów. Co więcej, a varargsmoże być tylko ostatnim argumentem metody, chociaż nie dotyczy to również tablicy.
meth(int... a)można wywoływać jako jeden meth(1, 2)lub meth(new int[] {1, 2}). Varargs to cukier składniowy, który zmienia pierwszą wersję w drugą wersję. Rzeczywisty typ (kod bajtowy) parametru to typ tablicy. Jeśli chodzi o konieczność bycia ostatnim, jeśli się nad tym zastanowić, nie ma innego rozsądnego wyboru.
Java Language Specification mówi:
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[][];
W ten sposób otrzymają dokładnie ten sam kod bajtowy.
Są całkowicie równoważne. int [] arrayjest preferowanym stylem. int array[]jest po prostu zapewniony jako równoważny styl zgodny z C.
Oba mają to samo znaczenie. Jednak istnienie tych wariantów pozwala również na to:
int[] a, b[];
który jest taki sam jak:
int[] a;
int[][] b;
Jest to jednak okropny styl kodowania i nigdy nie należy tego robić.
Są takie same, ale istnieje istotna różnica między tymi stwierdzeniami:
// 1.
int regular, array[];
// 2.
int[] regular, array;
w 1. regular jest tylko liczbą całkowitą, w przeciwieństwie do 2. gdzie zarówno regularna, jak i tablica są tablicami liczb całkowitych.
W związku z tym preferowane jest drugie stwierdzenie, ponieważ jest bardziej przejrzyste. Pierwsza forma jest również odradzana zgodnie z tym samouczkiem na temat Oracle .
Jak już wspomniano, nie ma dużej różnicy (jeśli zadeklarujesz tylko jedną zmienną na linię).
Pamiętaj, że SonarQube traktuje twój drugi przypadek jako niewielki zapach kodu:
Oznaczenia tablic „[]” powinny być na typie, a nie na zmiennej (squid: S1197)
Oznaczenia tablic powinny zawsze znajdować się na typie, aby zapewnić lepszą czytelność kodu. W przeciwnym razie programiści muszą spojrzeć zarówno na typ, jak i nazwę zmiennej, aby wiedzieć, czy zmienna jest tablicą.
Przykład niezgodnego kodu
int matrix[][]; // Noncompliant int[] matrix[]; // NoncompliantZgodne rozwiązanie
int[][] matrix; // Compliant
Tak, dokładnie tak samo. Osobiście wolę
int[] integers;
ponieważ od razu staje się oczywiste dla każdego czytającego Twój kod, że liczby całkowite są tablicami liczb całkowitych, w przeciwieństwie do
int integers[];
co nie czyni tego tak oczywistym, szczególnie jeśli masz wiele deklaracji w jednym wierszu. Ale znowu są one równoważne, więc sprowadza się to do osobistych preferencji.
Sprawdź tę stronę dotyczącą tablic w Javie, aby uzyskać bardziej szczegółowe przykłady.
deklarując odniesienie do pojedynczej tablicy, nie ma między nimi dużej różnicy. więc następujące dwie deklaracje są takie same.
int a[]; // comfortable to programmers who migrated from C/C++
int[] a; // standard java notation
deklarując wiele odniesień tablicowych, możemy znaleźć różnicę między nimi. następujące dwa stwierdzenia oznaczają to samo. w rzeczywistości to od programisty zależy, który z nich śledzi. ale zalecana jest standardowa notacja Java.
int a[],b[],c[]; // three array references
int[] a,b,c; // three array references
Chociaż int integers[]rozwiązanie zakorzenia się w języku C (i dlatego można je uznać za „normalne” podejście), wiele osób uważa, że jest int[] integersbardziej logiczny, ponieważ nie pozwala na tworzenie zmiennych różnych typów (tj. Int i tablica) w jednej deklaracji (w przeciwieństwie do deklaracja w stylu C).