Java/Array: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
fix gnomici e piccole correzioni; codice
Riga 34:
</source>
 
Questo è il modocostrutto standard per iterare lungo l'array, se si vuole dichiarare esplicitamente l'indice del ciclo (cioè la variabile contatore ''i''). In questo esempio si è utilizzato anche il campo <code>length</code>, che restituisce il numero di elementi dell'array.
 
[[#Indici dell'array|Qui sotto]] il ciclo ''for'' viene esaminato e spiegato nel dettaglio.
 
=== Ciclo ''enhanced for'' ===
Un altro esempio è la scrittura a video di tutti gli elementi dell'array:
<source lang="Java">
Line 63 ⟶ 64:
</source>
 
Vale la pena di esaminare da vicino l'istruzionequesta ''for''istruzione:
*si vuole iterare lungo tutto l'array, dalla prima all'ultima cella. Come già osservato, la prima cella ha indice 0, mentre l'ultima ha indice <code>array.length - 1</code>.
*Quindi, l'indice del ciclo deve partire da 0, essere incrementata ogni volta di un'unità, e tutto questo finché non sarà raggiunto il valore massimo, che è <code>array.length - 1</code>;
Line 74 ⟶ 75:
... // istruzioni
</source>
Questo ciclo fa sì che le istruzioni che costituiscono il corpo del ''for'' vengono eseguite una volta in più rispetto a quanto avviene nel codice precedente, perché il corpo viene eseguito anche per <code>i = array.length</code>, cioè quando ''i'' rappresenta un indice che non ha una cella corrispondente nell'array. Un simile errore viene scoperto solo a ''run-time'', quando il programma genera una ArrayIndexOutOfBoundsException non prevista (vedere [[#ArrayIndexOutOfBoundsException|più giù]]).
 
== Altre info ==
; Inizializzazione delle celle dell'array
Si noti che, quando viene creato un array tramite ''new'', tutti gli ''slot'' vengono automaticamente inizializzati al valore di default del tipo corrispondente. Ad esempio, l'istruzione <code>new byte[1024]</code> crea un array di 1024 slot inizializzati al valore 0; oppure <code>new Object[1024]</code> crea un array di 1024 celle e assegna loro il valore ''null''. QuestoSi noti che questo meccanismo è diverso da quello che si trova in altri linguaggi, come il C (in cui le celle dell'array hanno inizialmente valori casuali o imprevedibili) ed è lo stesso meccanismo che in Java entra in atto quando si crea un oggetto di qualunque altro tipo.
 
; Lunghezza dell'array
Line 99 ⟶ 100:
Il tipo di un array creato con <code>new T[...]</code> è <code>T[]</code>. L'array può essere convertito verso qualunque tipo <code>S[]</code> dove <code>S</code> è un supertipo di <code>T</code>.
 
Questo significa che tutti gli array di oggetti (cioè gli array in cui il tipo <code>T</code> è una classe o interfaccia) possono essere convertiti verso <code>Object[]</code>. Inoltre, poiché tutti gli array sono oggetti, possono essere convertiti anche verso <code>Object</code>.
 
Infine, 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 132 ⟶ 133:
== Modi per creare un array ==
Consiste nella creazione tramite ''new'', indicando in qualche modo il numero di elementi che l'array dovrà contenere in memoria.<br/>
Esistono trediversi modi di creare un array:
<source lang="Java">
// Primo modo: con valori di default
int[] a1;
a1 = new int[7];
int[] a2 = new int[7]; // equivalente
// Ogni slot dell'array viene automaticamente inizializzato al valore di default del tipo corrispondente.
// Quindi, in questo caso, a e b contengono 7 slot, a ciascuno dei quali è stato automaticamente assegnato il valore 0. Questo
// comportamento è diverso rispetto a quanto avviene in C.
// Secondo modo: indicando gli elementi dell'array
int[] b2b1 = new int[] { 0, 1, 0xAB, -15, Integer.MAX_VALUE, 51, 10xAB }; // equivalente
int[] b1;
b1 = new int[] b2 = { 0, 1, 0xAB, -15, Integer.MAX_VALUE, 51, 10xAB }; //equivalente
int[] b1b3;
int[] b2 = new int[] { 0, 1, 0xAB, -15, Integer.MAX_VALUE, 5, 1 }; // equivalente
b3 = new int[] c1 = { 0, 1, 0xAB, -15, Integer.MAX_VALUE, 51, 10xAB }; // equivalente
// c2b3 = { 0, 1, 0xAB, -15, Integer.MAX_VALUE, 51, 10xAB }; // non compila: è necessario indicare ilci nomevuole del"new tipoint[]"
// Terzo modo:
int[] c1 = { 0, 1, 0xAB, -15, Integer.MAX_VALUE, 5, 1 };
// Funziona solo con l'inizializzazione, nel senso che il codice seguente non funziona:
int[] c2;
// c2 = { 0, 1, 0xAB, -15, Integer.MAX_VALUE, 5, 1 }; // non compila: è necessario indicare il nome del tipo
</source>