2011-01-16 10 views
10

¿Cuál es la diferencia entre los dos métodos siguientes de la inicialización del campo:matriz de diferencias de inicialización de Java

  1. Object[] oArr = new Object[] {new Object(), new Object()};
  2. Object[] oArr = {new Object(), new Object()};

se relaciona con asignación del montón/pila?

Gracias!

+8

No hay ninguna diferencia. –

+0

"la optimización prematura es la raíz de todo mal" – gulbrandr

+2

@gulbrandr, ¿relevancia? – davin

Respuesta

18

Ninguna en absoluto: son solo formas diferentes de expresar lo mismo.

Sin embargo, el segundo formulario solo está disponible en una declaración de variable. Por ejemplo, no se puede escribir:

foo.someMethod({x, y}); 

pero se puede escribir:

foo.someMethod(new SomeType[] { x, y }); 

El bit correspondiente de la especificación del lenguaje Java es la sección 10.6 - Array Initializers:

un inicializador gama puede especificarse en una declaración, o como parte de una expresión de creación de matriz (§15.10), crear una matriz y proporcionar algún init valores ial:

+0

@gasan: Sí, eso es parte de una expresión de creación de matriz ... No veo cómo va en contra de nada en mi respuesta. –

2

Absolutamente idéntico. El segundo se taquigrafía para el primero (solo cuando, como aquí, se hace como parte de una declaración de variable.

1

En Java todos los objetos viven en el montón, ya que los arreglos son objetos en Java que viven en la pila.

para estos dos no hay diferencia en el resultado, que te tiene dos objetos de matriz con los mismos elementos.

sin embargo a veces se encontrará con algunas situaciones en las que no se pueden utilizar, por ejemplo, usted don ' t conoce los elementos de la matriz. Luego te quedas atascado con este formulario:

Object [] array=new Object[size];

0

¡Todavía hay una pequeña diferencia pegadiza!

Usted puede hacer

int[] arr; 
arr= {1,2,3}; // Illegal 

Pero se puede hacer muy bien

int[] arr; 
arr = new [] {1,2,3} //Legal 

Además, si estás para inicializar más tarde, entonces no se puede hacer

int arr; 
arr = new [] {1,2,3} //Illegal 
Cuestiones relacionadas