¿Cuál es la diferencia entre estos dos métodos de inicialización de matrices Java?

Vamos a ver.

Prueba de clase pública {
public static void main (String [] args) {
int [] num = nuevo int [3];
num [0] = 8;
num [1] = 6;
num [2] = 7;
System.out.println (num);

int [] bar = {8, 6, 7};
System.out.println (barra);
}
}

Después de compilar, podemos mirar el bytecode generado con “javap -c”

public static void main (java.lang.String []);
Código:
0: iconst_3
1: newarray int
3: astore_1
4: aload_1
5: iconst_0
6: bipush 8
8: iastore
9: aload_1
10: iconst_1
11: bipush 6
13: iastore
14: aload_1
15: iconst_2
16: bipush 7
18: iastore
19: getstatic # 2; // Campo java / lang / System.out: Ljava / io / PrintStream;
22: aload_1
23: invokevirtual # 3; // Método java / io / PrintStream.println: (Ljava / lang / Object;) V
26: iconst_3
27: newarray int
29: dup
30: iconst_0
31: bipush 8
33: iastore
34: dup
35: iconst_1
36: bipush 6
38: iastore
39: dup
40: iconst_2
41: bipush 7
43: iastore
44: astore_2
45: getstatic # 2; // Campo java / lang / System.out: Ljava / io / PrintStream;
48: aload_2
49: invokevirtual # 3; // Método java / io / PrintStream.println: (Ljava / lang / Object;) V
52: regreso

Puede ver que hay algunas diferencias estéticas (la segunda versión usa dup mientras que la primera versión usa cargas repetidas). Pero, fundamentalmente, ambas matrices se crean de la misma manera: empuje el índice en la pila, empuje el valor en la pila , y luego use la operación [math] iastore [/ math] para cada elemento de la matriz.

Puede haber una diferencia si intentas crear una matriz con entradas repetidas.

Para ampliar el punto de Marcas, cuando crea una matriz con la nueva palabra clave, el valor entre paréntesis es la longitud de la matriz, pero debido a que los índices de la matriz siempre comienzan con 0, el último elemento en cualquier matriz siempre es longitud-1. Los elementos de la matriz se inicializarán automáticamente con el valor 0, para una matriz int, que luego sobrescribirá con la suya.

Para evitar un error del compilador, o una excepción IndexOutOfRange en tiempo de ejecución, el primer ejemplo necesitaría hacer un nuevo int [3];

Uno inicializa una matriz vacía de entradas de tamaño igual a lo que se pone entre paréntesis en la inicialización. El otro crea una matriz de tamaño igual al número de elementos en las llaves con esos datos en sus respectivos lugares.

El primero producirá un error de compilación porque solo hay 2 elementos en la matriz, pero intenta colocar tres elementos en ella. Si lo haces con tres elementos grandes, no hay diferencia. En general, debe usar el primer método para asignar cosas, ya que podría estar asignando expresiones y / o haciendo cosas en un bucle.

More Interesting

Cómo obtener el índice de clasificación de matriz

¿De dónde debería comenzar a aprender el algoritmo? ¿Debería unirme a uno de los MOOC disponibles o leer libros como 'Introducción a los algoritmos'?

¿Existe algún estándar de algoritmo de programación de elevadores públicos?

¿En qué debe centrarse un estudiante de ingeniería informática, proyectos o estructuras de datos y algoritmos?

¿De dónde viene la palabra algoritmo?

¿Cuáles son las aplicaciones prácticas de los diversos algoritmos que estudian los estudiantes de CS en Data Structures?

Conozco la implementación básica de diferentes estructuras de datos como árboles, gráficos, colas y muchos más para inserción, eliminación, recorrido. Ahora, ¿cómo procedo a construir un sistema operativo?

Cómo aprender 'algoritmos' sobre los que el mundo tecnológico está hablando y aplicarlos a mi vida cotidiana

¿Cuál es la forma más fácil de animar el algoritmo de Dijkstra para Power Point Presentation?

¿Por qué no todos simplemente compran algoritmos comerciales y se enriquecen con ellos?

¿Cuáles son los buenos algoritmos de similitud y métricas para textos cortos (menos de 50 palabras)?

Algoritmos aleatorizados: ¿Dónde puedo encontrar una colección extraña de cosas no relacionadas?

¿Cómo funcionará el algoritmo KNN para la segmentación de imágenes?

¿Los algoritmos de aprendizaje profundo representan métodos basados ​​en conjuntos?

¿YouTube está sesgado políticamente?