2010-02-09 19 views
8

estaba actualizando una base de código heredado en Java y me encontré con una línea como esta:¿Hay alguna diferencia entre "Objeto [] x" y "Objeto x []"?

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

Esa línea atrapó mi atención porque estoy acostumbrado a este tipo de código:

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

El contenido de la matriz no es importante aquí. Tengo curiosidad sobre los corchetes al lado del nombre de la variable frente a los corchetes al lado del nombre de la clase. Intenté en Eclipse (con Java 5) y ambas líneas son válidas para el compilador.

¿Hay alguna diferencia entre esas declaraciones?

Respuesta

15

ambos son legales y ambos trabajan. Pero se recomienda colocar [] antes del nombre de la matriz.

De Javadocs:

También puede colocar los corchetes después del nombre de la matriz:

float anArrayOfFloats[]; // this form is discouraged 

Sin embargo, la convención desalienta esta forma; los corchetes identifican el tipo de matriz y deben aparecer con la designación de tipo.

+2

Poner el [] con el tipo es mucho más claro; intente leer "[]" como "array" - int [] se lee como "int array", mientras que int variableName [] ordena la parte "array" como una ocurrencia tardía. – froadie

4

No hay diferencia. Ambos son legales

Usted puede leer en Java Language Specification http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html

El [] puede aparecer como parte del tipo al principio de la declaración, o como parte de la sentencia declarativa de una variable en particular , o tanto, como en este ejemplo :

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

La matriz es particularmente malvada ..;) – AdrianoKF

14

No, ambos funcionan. Pero ten cuidado:

float anArrayOfFloats[], aSecondVariable; 

declarará una serie de flotadores y un flotador, mientras que:

float[] anArrayOfFloats, aSecondVariable; 

declarará dos hileras de flotadores.

+4

Creo que en este caso, la respuesta es usar dos declaraciones ... – uckelman

0

Respuesta corta: No.

1

Otra buena razón para escribir Integer[] ints en lugar de Integer ints[] es debido a las relaciones de herencia: Integer[] es subtipo de Number[] es subtipo de Object[].

En otras palabras, se puede poner Integers en una matriz Object, por lo que puede pensar en el [] como parte de la definición del tipo de objeto - por lo que tiene sentido tener que cerca del tipo en lugar del objeto nombre.

Cuestiones relacionadas