2012-02-01 10 views
15

Perché non possiamo fare gli array in Java come questo:creazione di array in Java (L'++ Style C)

int marks[5]; 

e assegnare valori dopo questa dichiarazione?

Chiunque si prega di spiegare la terminologia o la differenza.

+1

Hai provato? Cosa sono i risultati? –

+3

Puoi approfondire la tua domanda, sembra che tu stia chiedendo "Perché Java non usa esattamente la stessa sintassi del C++?" Forse è solo per me, la domanda potrebbe avere più senso per le persone che conoscono C++ e Java piuttosto che solo Java. –

+2

@Tichodroma: probabilmente ha provato e il risultato è stato "Errore di sintassi sul token" 5 ", cancella questo token". –

risposta

20

Questo perché non ci sono array di stack in Java. Ecco l'equivalente Java:

int[] marks = new int[5]; 

Sembra molto simile all'allocazione di array di dimensioni dinamiche in C++. Ovviamente non devi preoccuparti di chiamare uno delete[], perché è garbage collection.

+0

+1, battimi su [it] (http://ideone.com/hdYNT). –

1

Poiché gli array sono Object -s (che ereditano dalla classe Object). E per creare un oggetto devi usare la parola chiave new. (La maggior parte delle volte).
Penso che la ragione alla base della parola chiave new sia quella di indicare che le variabili sono riferimenti a istanze allocate dinamicamente.

+0

Okay ... Ottenere un po 'di questo ora ... Grazie – hk007

13

Poiché la sintassi che stai citando assegna la matrice sullo stack, e Java gli array sono oggetti, e tutti gli oggetti Java sono allocati nel mucchio (Modulo recenti ottimizzazioni JVM, ma quelli sono implicite).

E praticamente deve essere in questo modo in una lingua senza gestione manuale della memoria perché le cose allocate allo stack scompaiono quando la chiamata ritorna, portando a dei puntatori penzolanti, e una caratteristica fondamentale di Java non è quella di permettere cose del genere.

Ovviamente si potrebbe sostenere che Java dovrebbe utilizzare la sintassi di allocazione dello stack per eseguire l'allocazione dell'heap, ma ciò avrebbe confuso il diavolo con chiunque conoscesse C - non buono.

+0

+1 per menzionare le ottimizzazioni JVM implicite. – dasblinkenlight

5

In Java la dimensione della matrice è determinata dalla espressione che crea, ad esempio:

int[] marks = new int[5]; 

o

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

noti inoltre che, sebbene la sintassi int marks[] è consentito in Java (Java ha diverse regole di questo tipo per la compatibilità con C++), non è t raccomandato, la sintassi int[] marks è più idiomatica e quindi preferita.

Problemi correlati