Respuestas:
Son semánticamente idénticos. La int array[]
sintaxis solo se agregó para ayudar a los programadores de C a acostumbrarse a Java.
int[] array
es preferible y menos confuso.
int array[]
sintaxis. También lógico ... de alguna manera retorcida. :)
int array[]
Tiene más sentido para mí. ¿Qué opinas de esta declaración? int[] x, y
? ¿Es y
una matriz o no? Tal vez lo sea, tal vez no lo sea. Solo los gurús de Java pueden responder con confianza ...
int[] x, y
, y
es una matriz (porque []
pertenece al tipo), y en el caso de int x[], y
, y
no es una matriz ( []
pertenece a la variable).
Hay una pequeña 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 usarlo d
.
No hay diferencia.
Prefiero que el type[] name
formato en 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 la especificación Java . 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 sería (probablemente):
int[] a;
int[] b;
De la 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 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 he nunca visto este código (válida):
String[] rectangular[] = new String[10][10];
int[] a[];
- eso nunca será claro ;-)
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
Ninguna 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[][];
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. El int puzzle[]
sin embargo forma se desaconseja, el int[] puzzle
se prefiere de acuerdo con las convenciones de codificación . Consulte también el tutorial oficial de matrices 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 C
, sobre la cual se basa Java.
Como curiosidad, hay tres formas de definir un main
método válido en Java:
public static void main(String[] args)
public static void main(String args[])
public static void main(String... args)
public static void main ( String \u005B \u005D args )
, esta es otra variante también.
String... param
, es una matriz
, then why it is not possible to call a method like say
someMethod (1, 2) `si se define someMethod
como someMethod ( int[] numbers )
. Las matrices exigen que el argumento, debe ser de una ubicación de memoria contigua, sin embargo varargs
, primero formará una matriz de los argumentos suministrados. Además, a varargs
solo puede ser el argumento final de un método, aunque lo mismo no es cierto para una matriz.
meth(int... a)
puede llamarse como meth(1, 2)
o meth(new int[] {1, 2})
. Varargs es azúcar sintáctico que convierte la primera versión en la segunda versión. El tipo real (bytecode) del parámetro es un tipo de matriz. En cuanto a tener que ser el último, si lo piensas bien, no hay otra opción sensata.
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.
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.
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, a diferencia de 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. La primera forma también se desaconseja de acuerdo con este tutorial sobre 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 olor de código menor :
Los designadores de matriz "[]" deben estar en el tipo, no en 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 una matriz o no.
Ejemplo de código no conforme
int matrix[][]; // Noncompliant int[] matrix[]; // Noncompliant
Solución conforme
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 la preferencia personal.
Consulte esta página sobre matrices en Java para obtener 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
Si bien la int integers[]
solución se basa en el lenguaje C (y, por lo tanto, puede considerarse el enfoque "normal"), muchas personas encuentran int[] integers
más lógica, ya que no permite crear variables de diferentes tipos (es decir, un int y una matriz) en una declaración (en oposición a la declaración de estilo C).