2008-09-24 38 views

Respuesta

217

Son semánticamente idénticos. La sintaxis int array[] solo se agregó para ayudar a los programadores de C a acostumbrarse a Java.

int[] array es mucho preferible y menos confuso.

+39

El [] es parte del tipo, no del nombre. Para mí, esa es la mayor diferencia. –

+3

@Andre - y en C, el [] es parte del declarador, no el especificador de declaración, de ahí la sintaxis 'int array []'. También es lógico ... de alguna manera retorcida. :) – Kos

+1

C juega este pequeño juego :) Y me parece encantador :) Incluso con como ... punteros. La sintaxis 'correcta' para punteros es int * imAPointer. Es tonto y ordenado. – ScarletAmaranth

2

En Java, estos son simplemente diferentes métodos sintácticos de decir lo mismo.

1

Son lo mismo. Uno es más legible (para algunos) que el otro.

1

Son completamente equivalentes. int [] array es el estilo preferido. int array[] acaba de proporcionarse como un estilo equivalente, compatible con C.

4

No hay diferencia, pero Sun recomienda ponerlo al lado del tipo como se ha explicado here

140

Hay una ligera diferencia, si quieres pasar a declarar más de una variable en la misma declaración:

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 

Tenga en cuenta que este es un estilo de codificación incorrecto, aunque es probable que el compilador detecte su error en el momento en que intenta utilizar d.

+22

Escribiendo que en código real sería una ofensa de despido instantánea :) – skaffman

+0

¿Qué línea es ofensiva? ¿Ambos? – nobar

10

No hay ninguna diferencia entre los dos; ambos declaran una matriz de int s. Sin embargo, se prefiere el primero ya que mantiene la información del tipo en un solo lugar. Este último solo es realmente compatible con el beneficio de los programadores C/C++ que se trasladan a Java.

12

Sin diferencia.

Citando de Sun:

El [] pueden aparecer como parte del tipo en el comienzo de la declaración, o como parte de la declarador para una variable en particular, o ambos, como en este ejemplo: byte[] rowvector, colvector, matrix[];

Esta declaración es equivalente a: byte rowvector[], colvector[], matrix[][];

52

no hay dife rence.

Prefiero el formato type[] name en es claro que la variable es una matriz (menos mirando alrededor para descubrir cuál es).

EDIT:

Oh, espera, hay una diferencia (se me olvidó porque nunca declarar más de una variable a la vez):

int[] foo, bar; // both are arrays 
int foo[], bar; // foo is an array, bar is an int. 
11

No hay ninguna diferencia real; sin embargo,

double[] items = new double[10]; 

se prefiere ya que indica claramente que el tipo es una matriz.

+1

artículos dobles [] está realmente allí para los programadores C –

+0

@Steve, esa debe ser la razón por la que sigo haciéndolo de esa manera. :-) –

+0

Veamos: public static void main (String [] args) .... Uso el más tarde. – OscarRyz

3

La opción más preferida es int[] a - porque int[] es el tipo y a es el nombre. (su segunda opción es la misma que esta, con espacio fuera de lugar)

Funcionalmente no hay diferencia entre ellos.

2

El Java Language Specification dice:

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[][]; 

Así que resultará en exactamente el mismo código de bytes.

23

No, estos son lo mismo. Sin embargo

byte[] rowvector, colvector, matrix[]; 

es equivalente a:

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

Tomado de Java Specification. Eso significa que

int a[],b; 
int []a,b; 

son diferentes. No recomendaría ninguna de estas declaraciones múltiples. Más fácil de leer que (probablemente) ser:

int[] a; 
int[] b; 
+3

Sin embargo, es una buena práctica usar una declaración por identificador en lugar de declarar múltiples identificadores en una línea. – rsp

+0

@rsp - Totalmente de acuerdo, editado una mejor práctica en. Sin embargo, es sugerente lo que es una buena práctica. – Ishtar

2

No hay diferencia en la funcionalidad entre ambos estilos de declaración. Ambos declaran una matriz de int.

Pero int[] a mantiene la información del tipo en conjunto y es más detallada, así que lo prefiero.

1

Ambos tienen el mismo significado. Sin embargo, la existencia de estas variantes también permite esto:

int[] a, b[]; 

que es lo mismo que:

int[] a; 
int[][] b; 

Sin embargo, este estilo de codificación es horrible y nunca debe hacerse.

+0

quiere decir, int [] a, b []; b se convierte en una matriz multidimensional –

+1

+1, sí, es genial, nunca pensé en ello. –

1

Sí, exactamente lo mismo.En lo personal, prefiero

int[] integers; 

porque hace que sea inmediatamente obvio para cualquiera que lea el código que los enteros es un arreglo de la INT, en contraposición a

int integers[]; 

que no lo hace todo tan obvio, particularmente si tienes múltiples declaraciones en una línea. Pero, de nuevo, son equivalentes, por lo que se reduce a preferencias personales.

Consulte this page on arrays in Java para obtener ejemplos más detallados.

0

Ambos están bien. Sugiero que elijas uno y lo sigas. (Hago la segunda)

2

Ellos son los mismos, pero hay una diferencia importante entre estas declaraciones:

// 1. 
int regular, array[]; 
// 2. 
int[] regular, array; 

en 1. regular es simplemente un entero, en contraposición a 2. Cuando los recursos ordinarios y array son matrices de int.

Por lo tanto, se prefiere la segunda declaración que tiene, ya que es más clara. La primera forma también se desaconseja según this tutorial on Oracle.

+0

¡Gracias a todos! Iré con el segundo y me quedaré con él. – Espen

0

Mientras que la solución int integers[] se basa en el lenguaje C (y puede considerarse el enfoque "normal"), muchas personas encuentran que int[] integers es más lógico ya que no permite crear variables de diferentes tipos (es decir, un int y una matriz) una declaración (a diferencia de la declaración de estilo C).

5

Es una forma alternativa, que se tomó prestada de C, en la que se basa Java.

Como curiosidad, hay tres maneras de definir un método válido main en Java:

  • public static void main(String[] args)
  • public static void main(String args[])
  • public static void main(String... args)
+1

Con el debido respeto, pero ¿esta es la respuesta? Es el tercer formulario, especificado, en realidad tiene que hacer algo, con lo que se está preguntando en la publicación original. Los primeros dos argumentos son matrices para el método principal, aunque la tercera entidad es un argumento variable (que no es lo mismo que una matriz). Si la pregunta es definir el método principal, entonces también se puede agregar otro formulario para definir un método principal, como 'public static void main (String \ u005B \ u005D args)', esta es otra variante también. –

+0

@nIcEcOw un parámetro varargs, por ejemplo 'String ... param', * es * una matriz – Bohemian

+0

Solo surge una duda simple, si ambas son matrices, es decir, String [] y String ...', entonces ¿por qué no es posible? para llamar a un método como say 'someMethod (1, 2)' si se está definiendo 'someMethod' como' someMethod (int [] numbers) '. Las matrices exigen que el argumento, debe ser desde la ubicación de memoria contigua, aunque 'varargs', primero hará una matriz de los argumentos suministrados. Además, un 'varargs' solo puede ser el argumento final de un método, aunque lo mismo no es cierto para una matriz. –

6

Ambos son igualmente válidas. Sin embargo, se desaconseja la forma int puzzle[], se prefiere int[] puzzle de acuerdo con coding conventions. Véase también el Java arrays tutorial oficial:

Del mismo modo, se puede declarar un arreglo de otros tipos:

byte[] anArrayOfBytes; 
short[] anArrayOfShorts; 
long[] anArrayOfLongs; 
float[] anArrayOfFloats; 
double[] anArrayOfDoubles; 
boolean[] anArrayOfBooleans; 
char[] anArrayOfChars; 
String[] anArrayOfStrings; 

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.

Tenga en cuenta el último párrafo.

Recomiendo leer los tutoriales oficiales de Sun/Oracle en lugar de algunos de terceros.De lo contrario, correría el riesgo de aprender malas prácticas.

20

De section 10.2 of the Java Language Specification:

El [] pueden aparecer como parte del tipo en el comienzo de la declaración, o como parte de la declarador para una variable en particular, o ambos, como en este ejemplo:

byte[] rowvector, colvector, matrix[]; 

Esta declaración es equivalente a:

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

Personalmente casi todos el código de Java que he visto utiliza el primer formulario, que tiene más sentido al mantener toda la información de tipo sobre la variable en un solo lugar. Me gustaría que la segunda forma se desecharon, para ser honesto ... pero así es la vida ...

Afortunadamente no creo que nunca he visto esto (válido) Código:

String[] rectangular[] = new String[10][10]; 
+0

Gracias, me estaba rascando la cabeza por esto. Curiosamente, cuando busqué en Google el título de la pregunta, no encontré nada ... – Yoav

+3

+1 Estoy de acuerdo con no permitir el segundo formulario. +1 también porque no me di cuenta de que podía mezclar 'n' coincidencia como 'int [] a [];' - eso * nunca * va a estar claro ;-) – Bohemian

0

al declarar una sola referencia de matriz, no hay mucha diferencia entre ellos. entonces las siguientes dos declaraciones son las mismas.

int a[]; // comfortable to programmers who migrated from C/C++ 
int[] a; // standard java notation 

al declarar varias referencias de matriz, podemos encontrar la diferencia entre ellas. las siguientes dos declaraciones significan lo mismo. de hecho, depende del programador cuál es el siguiente. pero se recomienda la notación java estándar.

int a[],b[],c[]; // three array references 
int[] a,b,c; // three array references 
1

Como ya se ha mencionado, no hay mucha diferencia (si declara solo una variable por línea).

Tenga en cuenta que SonarQube trata el segundo caso como código secundario olor:

designadores de matriz "[]" debe ser del tipo, no la variable (calamar: S1197)

Los designadores de matriz siempre deben ubicarse en el tipo para una mejor legibilidad del código . De lo contrario, los desarrolladores deben mirar tanto el tipo como el nombre de la variable para saber si una variable es o no una matriz.

Código Noncompliant Ejemplo

int matrix[][]; // Noncompliant 
int[] matrix[]; // Noncompliant 

RoHS Solución

int[][] matrix; // Compliant 
Cuestiones relacionadas