2011-12-26 23 views
8

Cuando creo una nueva matriz, hago algo como esto.Java - Declarar matrices

int[] anArray = {1, 2, 3}; 

Pero he visto a algunas personas hacer algo así como.

int[] anArray = new int[] {1, 2, 3}; 

Entiendo lo que hace, pero no entiendo el objetivo. ¿Hay algún beneficio de hacerlo de una manera u otra?

Gracias

Respuesta

11

No hay diferencia en el comportamiento donde ambos son válidos. Están cubiertos en la sección 10.6 y 15.10 de la especificación del lenguaje Java.

Sin embargo, la primera sintaxis es solo válida al declarar una variable. Así, por ejemplo:

public void foo(String[] args) {} 

... 

// Valid 
foo(new String[] { "a", "b", "c" }; 

// Invalid 
foo({"a", "b", "c"}); 

En cuanto a la finalidad - el propósito de la primera sintaxis es permitir que las declaraciones de variables a ser más concisa ...y el propósito de la segunda sintaxis es para uso general como una expresión. Sería extraño que desaprobaran la segunda sintaxis para las declaraciones de variables, simplemente porque la sintaxis más concisa está disponible.

+0

Lo sé. Solo estoy hablando de declarar una matriz como en el OP. – Stripies

+4

@JonMannerberg: Bueno, no está claro cuánto sabe un tema cuando hace una pregunta al respecto, y no dice qué partes * sabe *. –

+1

@JonMannerberg: No hay mejor respuesta que uno de JON SKEET mismo –

5

son casi lo mismo, pero la primera es aplicable para la asignación de objetos como:

int[] anArray = {1, 2, 3}; 

El otro es más globaly como

callingMyMethod(new Object[]{object1,object2}); 

La sintaxis incorrecta sería

callingMyMethod({object1,object2}); 

Vamos a ir más lejos

Estos inicialización tienen razón:

Object[] objeto={new Object(), new Object()}; 
Object[] objeto=new Object[]{new Object(), new Object()}; 

También justo:

Object[] objeto; 
objeto=new Object[]{new Object(), new Object()} 

Pero como Jon sugirió que esto está mal:

Object[] objeto; 
objeto={new Object(), new Object()}; 

¿Por qué? Array Initializer Y Array Creation Expression

De todos modos, su sintaxis es correcta. No hay beneficio en uno contra el otro.

Una lectura interesante sobre este tema:

Arrays en Oracle La documentación oficial

Esto también han sido cubiertos en este thread

+1

La primera sintaxis también está bien para los tipos de referencia, siempre que tenga los valores de antemano. –

+0

sí, es malo, comprobé dos veces y corregiré – Necronet

+0

Aún incorrecto: no es * asignación * lo que es importante, es si el valor es parte de una variable * declaración *. No puede usar la primera sintaxis para asignar un nuevo valor a una variable previamente declarada. –

5

Es sólo un estándar. Si usa:

int[] anArray = new int[] {1, 2, 3}; 

Usted dice que cada número (1,2,3) es un int. No podría ser doble, flotar, etc. Es solo por razones de seguridad.

5

Se usaría la segunda manera, si la declaración se debe hacer antes de la inicialización.

int[] arr; 
arr = { 2, 5, 6, 12, 13 }; 

no funcionaría, por lo que utilizar:

int[] arr; 
arr = new int[]{ 2, 5, 6, 12, 13 }; 

lugar. Otra forma es declarar otra variable:

int[] arr; 
int[] tmparr = { 2, 5, 6, 12, 13 }; 
arr = tmparr; 

Así que si usted no necesita para separar la declaración de la inicialización, es sólo una cuestión de código limpio (utilizar cualquiera de ellas constantemente).

+0

De estas publicaciones, entiendo que es meramente una preferencia personal, ¿es correcto? ? – Stripies