Java/Array: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m raggruppo note, edit minori
mNessun oggetto della modifica
Riga 6:
 
== Caratteristiche ==
''Si veda anche la [http://java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7 sezione 10.7] del capitolo 10 delle specifiche di linguaggio.''
 
Un array è un [[Java/Oggetti|oggetto]] dotato di un numero fisso di ''celle'' (in inglese, ''slot''), il tipo delle quali è chiamato ''component type'' dell'array. Esse si comportano esattamente come se fossero dei campi non <tt>final</tt>, con le seguenti differenze:
*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]].
 
Un tipo dell'array è sempre un tipo riferimento, e si indica apponendo una coppia di parentesi quadre al ''component type''. Esempi:
Line 16 ⟶ 18:
*<tt>int[][]</tt> indica il tipo array il cui ''component type'' è <tt>int[]</tt>,<ref>In altre parole: indica il tipo di un array le cui celle referenziano degli array di int.</ref> quindi, in definitiva, indica il tipo <tt>array di array di int</tt>
 
Si noti che il tipo di un array non include '''mai''' il numero deglidelle elementicelle. Quest'ultimoPer èconoscere disponibilequesto tramitenumero, si usa il [[#Membricampo dicampo <tt>length</tt>, il quale si comporta come un array|campo <tt>lengthpublic final int</tt>]].
 
; Celle
Le singole celle dell'array sono considerate come dei campi, e sono identificate da un indice numerico. L'indice della prima cella è sempre <tt>0</tt><ref>Si dice che gli indici sono <tt>0-based</tt>. In altri linguaggi, gli indici sono sempre <tt>1-based</tt> o possono essere scelti arbitrariamente.</ref> e, pertanto, l'indice dell'ultima cella è sempre <tt>n - 1</tt>, dove <tt>n</tt> è il numero di celle totali.
 
Ad esempio:
:<tt>System.out.println(i[0]);</tt> stampa a video il valore della prima cella dell'array referenziato dalla variabile <tt>i</tt>.
:<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>Per maggiori informazioni, vedi {{cita libro|titolo=The Java Language Specification (Runtime Evaluation of Array Access)|url=http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#39346|accesso=8 settembre 2011}}</ref>
 
; Clonazione
Gli array esibiscono un metodo pubblico <tt>[http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#clone() clone()]</tt>.
 
== Creazione e distruzione ==
Line 76 ⟶ 90:
 
Questo significa che tutti gli array di oggetti possono essere convertiti verso <code>Object[]</code>.
 
== Membri di un array ==
''Si veda anche la [http://java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7 sezione 10.7] del capitolo 10 delle specifiche di linguaggio.''
 
; Celle
Le singole celle dell'array sono considerate come dei campi, e sono identificate da un indice numerico. L'indice della prima cella è sempre <tt>0</tt><ref>Si dice che gli indici sono <tt>0-based</tt>. In altri linguaggi, gli indici sono sempre <tt>1-based</tt> o possono essere scelti arbitrariamente.</ref> e, pertanto, l'indice dell'ultima cella è sempre <tt>n - 1</tt>, dove <tt>n</tt> è il numero di celle totali.
 
Ad esempio:
:<tt>System.out.println(i[0]);</tt> stampa a video il valore della prima cella dell'array referenziato dalla variabile <tt>i</tt>.
:<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>Per maggiori informazioni, vedi {{cita libro|titolo=The Java Language Specification (Runtime Evaluation of Array Access)|url=http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#39346|accesso=8 settembre 2011}}</ref>
 
; Lunghezza
Il numero di celle è restituito dal campo <tt>length</tt>. Questo si comporta come un campo <tt>public final int</tt>.
 
; Clonazione
Gli array esibiscono un metodo pubblico <tt>[http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#clone() clone()]</tt>.
 
== ArrayIndexOutOfBoundsException ==
Line 124 ⟶ 120:
... // istruzioni
</source>
Questo ciclo fa sì che le istruzioni che costituiscono il corpo del ''for'' siano eseguite una volta in più: nell'ultima iterazione, <tt>i</tt> è pari al valore di <tt>array.length</tt>, ovvero un indice fuori dai limiti dell'array (i quali [[#Membri di un array|sono]]cioè <tt>0</tt> e <tt>array.length - 1</tt>). Un simile errore viene scoperto solo a ''run-time'', quando il programma [[#ArrayIndexOutOfBoundsException|genera una ArrayIndexOutOfBoundsException]] non prevista.
 
=== For each ===