2012-02-01 8 views
15

Por qué no podemos hacer arreglos en Java como éste:Creación de matrices en Java (El estilo C++)

int marks[5]; 

y asignar valores después de esta declaración?

Cualquiera por favor explique la terminología o la diferencia.

+1

¿Lo intentó? ¿Cuál es el resultado? –

+3

¿Puedes responder a tu pregunta, parece que estás preguntando "¿Por qué Java no utiliza la misma sintaxis exacta que C++?" Posiblemente solo soy yo, la pregunta puede tener más sentido para las personas que conocen C++ y Java en lugar de solo Java. –

+2

@Tichodroma: probablemente lo intentó y el resultado fue "Error de sintaxis en el token" 5 ", elimine este token". –

Respuesta

20

Esto se debe a que no hay matrices de pila en Java. Aquí es equivalente Java:

int[] marks = new int[5]; 

Se parece mucho a la asignación de matrices de tamaño dinámicamente en C++. Por supuesto, no tiene que preocuparse por llamar a delete[], porque es basura recolectada.

+0

+1, pásame [a él] (http://ideone.com/hdYNT). –

1

Porque las matrices son Object -s (heredadas de la clase Object). Y para crear un objeto, debe usar la palabra clave new. (La mayoría de las veces).
Creo que la razón detrás de la palabra clave new es denotar que las variables son referencias a instancias dinámicamente asignadas.

+0

Bien ... Obtengo algo ahora ... Gracias – hk007

13

Debido a la sintaxis que está citando asigna la matriz en la pila, y Java matrices son objetos, y todos los objetos de Java se asignan en el montón (dadas las últimas optimizaciones de JVM, pero los que están implícitos).

Y tiene que ser así en un lenguaje sin administración de memoria manual porque las cosas asignadas por la pila desaparecen cuando la llamada regresa, lo que hace que los punteros cuelguen, y una característica fundamental de Java es no permitir cosas como esa.

Por supuesto, uno podría argumentar que Java debería usar la sintaxis de asignación de pila para hacer la asignación de pila, pero eso habría confundido al diablo con cualquiera que supiera C - no es bueno.

+0

+1 por mencionar optimizaciones JVM implícitas. – dasblinkenlight

5

En Java el tamaño de la matriz se determina por la expresión que lo crea, por ejemplo:

int[] marks = new int[5]; 

o

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

Nota también que aunque la sintaxis int marks[] está permitido en Java (Java tiene varias de estas reglas para la compatibilidad con C++), no es t recomendado, la sintaxis int[] marks es más idiomática y, por lo tanto, preferida.