2010-02-09 5 views
8

Je mettais une base de code existant en Java et j'ai trouvé une ligne comme ceci:Y a-t-il une différence entre "Object [] x" et "Object x []"?

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

Cette ligne attrapée mon attention parce que je suis habitué à ce genre de code:

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

Le contenu du tableau n'est pas important ici. Je suis curieux de connaître les parenthèses à côté du nom de la variable par rapport aux parenthèses à côté du nom de la classe. J'ai essayé dans Eclipse (avec Java 5) et les deux lignes sont valides pour le compilateur.

Y a-t-il une différence entre ces déclarations?

Répondre

15

Les deux sont à la fois juridique et le travail. Mais placer [] avant le nom du tableau est recommandé.

De Javadocs:

Vous pouvez également placer les crochets après le nom du tableau:

float anArrayOfFloats[]; // this form is discouraged 

Cependant, la convention dissuade cette forme; les parenthèses identifient le type de tableau et doivent apparaître avec la désignation du type.

+2

Mettre le [] avec le type est beaucoup plus clair; essayez de lire le "[]" comme "tableau" - int [] se lit comme "tableau int", tandis que int nomDeVariable [] sorte de piquer la partie "tableau" comme une réflexion après coup. – froadie

4

Il n'y a pas de différence. Les deux sont légaux.

Vous pouvez lire en Java Language Specification http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html

Le [] peut apparaître dans le cadre du type au début de la déclaration, ou dans le cadre de la declarator pour une variable particulière, ou à la fois, comme dans cet exemple :

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

La matrice est particulièrement maléfique.;) – AdrianoKF

14

Non, ils fonctionnent tous les deux. Mais attention:

float anArrayOfFloats[], aSecondVariable; 

déclarera un réseau de flotteurs et un flotteur, tandis que:

float[] anArrayOfFloats, aSecondVariable; 

raconterai deux tableaux de flotteurs.

+4

Je pense que dans ce cas, la réponse est d'utiliser deux déclarations ... – uckelman

0

Réponse courte: Non

1

Une autre bonne raison d'écrire Integer[] ints au lieu de Integer ints[] est en raison des relations d'héritage: Integer[] est sous-type de Number[] est sous-type de Object[].

En d'autres termes, vous pouvez mettre Integers dans un tableau Object, de sorte que vous pouvez penser à la [] dans le cadre de la définition de type de l'objet - ce qui explique pourquoi il est logique d'avoir à proximité du type au lieu de l'objet prénom.

Questions connexes