Pregunta

Recientemente he estado pensando en la diferencia entre las dos formas de definir una matriz:

  1. int [] array
  2. int array []

¿Hay alguna diferencia?

¿Fue útil?

Solución

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 más preferible y menos confuso.

Otros consejos

Hay una ligera diferencia si declara 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 mal estilo de codificación, aunque el compilador seguramente detectará su error en el momento en que intente usar d .

No hay diferencia.

Prefiero el formato type [] name en que está claro que la variable es una matriz (menos mirar alrededor para descubrir qué es).

EDITAR:

Oh, espera, hay una diferencia (lo olvidé porque nunca declaro 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.

No, estos son lo mismo. Sin embargo

byte[] rowvector, colvector, matrix[];

es equivalente a:

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

Tomado de Especificación de Java . Eso significa que

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

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

int[] a;
int[] b;

De sección 10.2 de la Especificación del lenguaje Java :

  

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

 byte[] rowvector, colvector, matrix[];
     

Esta declaración es equivalente a:

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

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

Afortunadamente, no creo que alguna vez haya visto este código (válido):

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

Los dos comandos son lo mismo.

Puede usar la sintaxis para declarar varios objetos:

int[] arrayOne, arrayTwo; //both arrays

int arrayOne[], intOne; //one array one int 

ver: http: //java.sun. com / docs / books / jls / second_edition / html / arrays.doc.html

No hay diferencia.

Citando de Sun :

  

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

     

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

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 de tipo en un solo lugar. Este último solo es realmente compatible para el beneficio de los programadores de C / C ++ que se trasladan a Java.

No hay diferencia real; sin embargo,

double[] items = new double[10];
Se prefiere

ya que indica claramente que el tipo es una matriz.

Ambos son igualmente válidos. Sin embargo, se desaconseja la forma int puzzle [] , se prefiere el int [] puzzle de acuerdo con convenciones de codificación . Consulte también el tutorial sobre matrices de Java :

  

Del mismo modo, puede declarar matrices 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.

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

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

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

No hay diferencia, pero Sun recomienda ponerlo al lado del tipo como se explica aquí

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.

La Especificación del lenguaje Java 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[][];

Por lo tanto, darán como resultado exactamente el mismo código de bytes.

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

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

Son completamente equivalentes. int [] array es el estilo preferido. int array [] solo se proporciona como un estilo equivalente compatible con C.

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 es un estilo de codificación horrible y nunca debe hacerse.

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

Pero int [] a mantiene unida la información de tipo y es más detallada, así que la prefiero.

Son lo mismo, pero hay una diferencia importante entre estas declaraciones:

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

en 1. regular es solo un int, en oposición a 2. donde regular y array son matrices de int.

Por lo tanto, se prefiere la segunda declaración que tiene, ya que es más clara. El primer formulario también se desaconseja de acuerdo con este tutorial en Oracle .

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

Tenga en cuenta que SonarQube trata su segundo caso como un leve olor a código :

  

Designadores de matriz " [] " debe estar en el tipo, no en la variable (calamar: S1197)

     

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

     

Ejemplo de código no conforme

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

Solución compatible

int[][] matrix;   // Compliant

Sí, exactamente lo mismo. Personalmente, prefiero

int[] integers; 

porque hace que sea inmediatamente obvio para cualquiera que lea su código que los enteros son una matriz de int, en lugar de

int integers[];

lo que no lo hace tan obvio, especialmente si tiene varias declaraciones en una línea. Pero, de nuevo, son equivalentes, por lo que se reduce a preferencias personales.

Consulte esta página en matrices en Java para ejemplos más detallados.

al declarar una referencia de matriz única, no hay mucha diferencia entre ellas. entonces las siguientes dos declaraciones son iguales.

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

al declarar múltiples referencias de matriz, podemos encontrar la diferencia entre ellas. Las siguientes dos afirmaciones significan lo mismo. de hecho, depende del programador cuál se sigue. pero se recomienda la notación java estándar.

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

Ambos están bien. Sugiero elegir uno y seguir con él. (Yo hago el segundo)

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top