2012-05-27 78 views
19

Me pregunto,gama de inicialización de primitivas

¿Cuál es exactamente la diferencia entre estas dos formas de inicializar un conjunto de primitivas: se prefiere

int[] arr1 = new int[]{3,2,5,4,1}; 

int[] arr2 = {3,2,5,4,1}; 

y cuál?

+8

No hay diferencia. ¡Deje de dar importancia a esos pequeños detalles y concéntrese en la imagen más grande! –

+2

El segundo; ¿Cuál es el objetivo de la primera? –

Respuesta

14

No hay ninguno, producen exactamente el mismo bytecode. Creo que es posible que el segundo formulario no sea compatible con versiones anteriores de Java, pero eso hubiera sido hace un tiempo.

Siendo ese el caso, se convierte en una cuestión de estilo, que es una cuestión de preferencia personal. Desde que usted lo solicitó específicamente, I prefiero el segundo, pero nuevamente, es una cuestión de gusto personal.

+0

En las versiones anteriores de Java, ¿se requería lo nuevo para los tipos primitivos si no era correcto? –

+0

@JimmyGeers: Eso es lo que dije. :-) –

+0

¿Qué versión se agregó esta característica? – reesjones

6

No hay diferencia entre las dos afirmaciones. Personalmente hablando, se prefiere el segundo. Porque tiene todos los elementos especificados en los corchetes. El compilador te ayudará a calcular el tamaño de la matriz.

No es necesario agregar int[] después del operador de asignación.

1

En este caso, la segunda porque es más bonita y menos detallado :)

+0

+1, corto y dulce –

7

Como otros han mencionado, que son equivalentes y la segunda opción es menos detallado. Por desgracia, el compilador no siempre es capaz de entender la segunda opción:

public int[] getNumbers() { 
    return {1, 2, 3}; //illegal start of expression 
} 

En este caso, usted tiene que utilizar la sintaxis completa:

public int[] getNumbers() { 
    return new int[]{1, 2, 3}; 
} 
1

útil en esta situación

void foo(int[] array) { 

} 

llamando con un literal

// works 
foo(new int[]{5, 7}) 

//illegal 
foo({5, 7}) 
2

En su caso, estos dos estilos terminan con el mismo efecto, ambos correctos, con el segundo más conciso. Pero en realidad estos dos estilos son diferentes.

Recuerde que las matrices en java son estructuras de datos de longitud fija. Una vez que crea una matriz, debe especificar la longitud.

Sin inicialización, el primer caso es

int[] arr1 = new int[5]; 

El segundo caso sería

int[] arr2 = {0,0,0,0,0}; 

Ves la diferencia? En esta situación, se prefiere el primer estilo, ya que no es necesario escribir todos los valores iniciales predeterminados manualmente.

Para mí, la única gran diferencia entre los dos estilos es cuando se crea una matriz sin inicialización explícita.