2010-02-09 25 views
8

byłem aktualizacją bazy starszych kod w Javie i znalazłem linię:Czy istnieje jakaś różnica między "Object [] x" a "Object x []"?

Object arg[] = { new Integer(20), new Integer(22) }; 

To linia przechwycony moją uwagę, bo jestem przyzwyczajony do tego rodzaju kodu:

Object[] arg = { new Integer(20), new Integer(22) }; 

Zawartość tablicy nie jest tutaj ważna. Jestem ciekawy nawiasów obok nazwy zmiennej w nawiasie obok nazwy klasy. Próbowałem w Eclipse (z Java 5) i obie linie są ważne dla kompilatora.

Czy jest jakaś różnica między tymi deklaracjami?

Odpowiedz

15

oba są legalne i obie prace. Ale umieszczenie [] przed nazwą tablicy jest zalecane.

Od Javadocs:

Można również umieścić w nawiasach kwadratowych po nazwie tablicy za:

float anArrayOfFloats[]; // this form is discouraged 

Jednak konwencja zniechęca do tej formy; nawiasy identyfikują typ tablicy i powinny pojawić się wraz z oznaczeniem typu.

+2

Umieszczenie [] z typem jest znacznie jaśniejsze; spróbuj odczytać "[]" jako "tablicę" - int [] jest interpretowane jako "int array", podczas gdy int zmiennaNazwa [] sortuje część "tablicową" jako spóźnioną. – froadie

4

Nie ma różnicy. Oba są legalne.

można przeczytać w języka Java Specification http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html

przycisk [] mogą być wyświetlane jako część typu na początku deklaracji, lub jako część declarator dla danej zmiennej lub zarówno, jak w tym przykładzie :

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

Ta matryca jest szczególnie zła ..;) – AdrianoKF

14

Nie, oba działają. Ale uważaj:

float anArrayOfFloats[], aSecondVariable; 

uzna jedną tablicę pływaków i jeden pływak, przy czym:

float[] anArrayOfFloats, aSecondVariable; 

uzna dwa tablice pływaków.

+4

Myślę, że w tym przypadku wystarczy użyć dwóch deklaracji ... – uckelman

0

Krótka odpowiedź: Nie

1

Kolejny dobry powód, aby napisać Integer[] ints zamiast Integer ints[] dlatego relacji dziedziczenia: Integer[] jest podtypem Number[] jest podtypem Object[].

Innymi słowy, można umieścić Integers w Object tablicy, więc można myśleć o [] jako część definicji typu obiektu - dlatego warto mieć go blisko typu zamiast obiektu Nazwa.

Powiązane problemy