Java/Array: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
m raggruppo note, edit minori |
||
Riga 6:
== Caratteristiche ==
Un array è un [[Java/Oggetti|oggetto]] dotato di un numero fisso di ''celle'' (in inglese, ''slot''), il
*invece che da un nome alfanumerico, ogni cella è identificata da un numero intero positivo, chiamato "indice";
*invece del punto, per indicare una cella si usa [[#Membri di un array|una notazione diversa]].
Il numero esatto di celle viene specificato nella creazione dell'array, e [[#Membri di un array|non può essere cambiato]].
*<tt>int[]</tt> indica il tipo <tt>array di int</tt>
*<tt>Object[]</tt> indica il tipo <tt>array di Object</tt>
Riga 19:
== Creazione e distruzione ==
; Inizializzando le celle con il valore di default
Riga 28:
Tutte le celle sono automaticamente [[Java/Oggetti#Inizializzazione dei campi|inizializzate]] con il valore di default del ''component type''. Nell'esempio appena mostrato, tutti gli ''slot'' dell'array referenziato dalla variabile <tt>i</tt> valgono inizialmente <tt>0</tt>.
Ad esempio,
; Elencando gli elementi
È disponibile
<source lang="Java">
int[] numeri = new int[] { -1, 0, 0 };
Riga 60:
== Tipi array ==
=== Gerarchia delle classi ===
È sempre possibile convertire un
In aggiunta, tutti gli array possono essere convertiti verso i tipi [http://download.oracle.com/javase/6/docs/api/java/lang/Cloneable.html java.lang.Cloneable] e [http://download.oracle.com/javase/6/docs/api/java/io/Serializable.html java.io.Serializable]. In particolare,
Line 74 ⟶ 73:
=== Gerarchia fra tipi array ===
Il tipo di un array creato con <tt>new T[...]</tt> è <tt>T[]</tt>.
Questo significa che tutti gli array di oggetti possono essere convertiti verso <code>Object[]</code>.
Line 88 ⟶ 87:
:<tt>i[0] = 5;</tt> assegna il valore intero <tt>5</tt> alla prima cella dell'array.
Più precisamente, l'accesso a una cella, in lettura o in scrittura, si identifica apponendo una coppia di parentesi quadre ad un'espressione il cui ''compile-time type'' sia un tipo array, e inserendo fra queste parentesi un'espressione il cui ''compile-time type'' sia convertibile verso il tipo <tt>int</tt> tramite [[Java/Tipi di dati#Conversioni|cast implicito]].<ref>
; Lunghezza
Line 146 ⟶ 145:
ovvero scorre l'array, dall'indice 0 all'indice <code>array.length - 1</code>, assegnando automaticamente il valore <code>array[i]</code> alla variabile <code>slot</code>, e ad ogni ciclo esegue l'istruzione <code>System.out.println(slot)</code>.
È chiamato ''for each'' o ''enhanced for'' ed è un costrutto introdotto dalla versione 1.5 di Java<ref group="F">Terza edizione della Java Language Specification.</ref>, che risparmia al programmatore il calcolo a mente degli indici se questi non sono realmente necessari (calcolo che viene svolto in automatico dal compilatore). Lo svantaggio è che non si può usare sempre, ad esempio nei seguenti casi:
*se bisogna accedere alle celle dell'array in scrittura;
*se è necessario accedere a più di una cella alla volta.
Line 181 ⟶ 180:
In C++, una variabile array è un puntatore costante, il quale, a run-time, punta ad un'area di memoria dei dati del programma, configurata dal compilatore. [[w:en:C_(programming_language)#Memory_management|Questa zona di memoria]] può essere a livello di programma (nel caso di una variabile globale o statica), oppure si trova nel ''call stack'' (nel caso di una variabile locale). <br/>
In Java, i tipi array sono tipi riferimento, quindi una variabile di tipo array
L'allocazione statica e quella automatica richiedono che, a tempo di compilazione, sia nota la quantità massima di memoria che l'array occuperà a run-time. Il compilatore del C++ ha bisogno di conoscere non solo il tipo, ma anche il numero delle celle, che infatti va indicato obbligatoriamente nell'istruzione che ''dichiara'' l'array. Quest'ultimo può essere utilizzato subito dopo l'istruzione che lo dichiara
Oltre agli array, anche i puntatori del C++ supportano l'operatore "parentesi quadre", e l'allocazione dinamica di un array tramite <tt>new</tt> restituisce appunto un puntatore. Tuttavia, esso andrà memorizzato in una variabile di tipo puntatore, e non in una variabile array, perché quest'ultima è un puntatore ''costante''. In effetti, in C++, la sintassi degli array "maschera"
Poiché il C++ non è dotato di garbage-collector,
Per massimizzare le prestazioni del codice eseguibile, in C++ è consentito accedere ad un array servendosi di un indice che sia fuori dai limiti. Di fatto, questa operazione
Infine, le regole del Java impongono che le celle risultino ''sempre'' inizializzate prima che sia possibile accedervi. In C++ non è così, in quanto le celle
== Note ==
; Note esplicative
<references/>
; Fonti
<references group="F"/>
|