1. Array in memoria

Negli esempi precedenti, le illustrazioni erano un po' imprecise.

Quando si creano array (come quando si creano stringhe), vengono allocati due blocchi di memoria separati: uno per memorizzare l' array (contenitore) stesso e un secondo blocco per la variabile che memorizza il suo indirizzo . L'immagine qui sotto rappresenta questo chiarimento:

Array in memoria

La memoria allocata per l'array di 10 intelementi e la int[]variabile che memorizza l' indirizzo dell'array intè mostrata in verde.

Per confronto, una normale intvariabile che memorizza il valore 199è mostrata in blu.

Questo ricorda un po' l'immagazzinamento di stringhe in memoria, non credi?

Esatto, stringhe. E proprio come quando lavori con le stringhe, puoi assegnare variabili di matrice l'una all'altra:

Codice Spiegazione
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Crea una matrice di 10 intelementi.
Assegna il valore 4alla cella con index 2.
Assegna il valore 9alla cella con index 7.
Nella bvariabile, salvare l'indirizzo memorizzato nella avariabile.
Ora ae bpunta allo stesso oggetto array in memoria.
Nella cella dell'oggetto matrice con index 9, scrivi la somma dei valori memorizzati nelle celle 2(che memorizza il valore 4) e 7(che memorizza il valore 9).

L'oggetto array rimane dov'era e le avariabili be memorizzano lo stesso indirizzo (riferimento) allo stesso oggetto. Guarda l'immagine:

Array in memoria 2

2. Ulteriori dettagli sull'utilizzo degli array

Puoi creare un array di elementi di qualsiasi tipo. Per fare ciò, basta scrivere parentesi quadre dopo il nome del tipo. In generale, la creazione di un array si presenta così:

type[] name = new type[number];

Dove type è il tipo degli elementi che memorizzeremo nell'array. Nome è il nome della variabile che useremo per fare riferimento all'array e numero è il numero di celle nell'array.

L'esempio sopra è la forma canonica per creare una variabile array e un oggetto array. In realtà, si tratta di due entità separate.

Puoi creare una variabile array separatamente da un oggetto array:

type[] name;
name = new type[number];

E un altro punto non trascurabile:

È possibile utilizzare variabili o anche intere espressioni come array indice e numero di elementi dell'array .

Esempi:

Codice Spiegazione
int n = 100;
int[] a = new int[n];
Crea una matrice di nelementi
int n = 100;
int[] a = new int[n * 2 + 3];
Crea un array con 203elementi
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
Importante:
A proposito, dovresti essere consapevole che se provi ad accedere a una cella dell'array utilizzando un indice che non esiste per l'array (nel nostro esempio, ciò significa qualsiasi numero intero non compreso nell'intervallo ), il programma andrà in crash con 0..99un ArrayIndexOfBoundException, il che significa che l'indice era al di fuori dei limiti dell'array.

3. Lunghezza della matrice

Come hai visto nell'esempio precedente, puoi creare una variabile array da sola e successivamente assegnarle un valore (un riferimento a un oggetto array) da qualche parte nel codice. Puoi anche fare questo:

Codice Spiegazione
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Creare una variabile array il cui tipo è int[]
Se la avariabile è minore di 10,
creare un array di 10elementi.
Altrimenti
crea un array di 20elementi

E ora cos'altro puoi fare con un tale array? Come fai a sapere quanti elementi ci sono?

Per aiutare in questo, gli array hanno una proprietà speciale (variabile) denominata length. Puoi trovare la lunghezza di un array usando questa espressione:

array.length;

Ecco arrayil nome della variabile array ed lengthè il nome della proprietà dell'array. Il valore della lengthproprietà non può essere modificato: la lengthproprietà stessa può essere assegnata ad altre variabili, ma non le si può assegnare nulla (se provi a farlo, il programma semplicemente non verrà compilato).

Possiamo continuare con l'esempio precedente in questo modo:

Codice Spiegazione
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
Creare una variabile array il cui tipo è int[]
Se la avariabile è minore di 10,
creare un array di 10elementi.
Altrimenti
crea un array di 20elementi
Ripeti su tutti gli elementi dell'array: da 0a lengtharray.length - 1

4. Riepilogo dei fatti sugli array in Java

Ricapitoliamo ciò che sappiamo sugli array:

Fatto 1. Un array è composto da molte celle.

Fatto 2. Si accede a una cella specifica utilizzando il suo numero (indice).

Fatto 3. Tutte le celle sono dello stesso tipo.

Fatto 4. Il valore iniziale di tutte le celle è 0 (se le celle memorizzano numeri), null(se le celle memorizzano riferimenti a oggetti) o false(se le celle memorizzano booleanvalori). Imparerai di più sui valori predefiniti in questo capitolo .

Il fatto 5. String[] list è solo la dichiarazione di una variabile. Questo non crea il contenitore (oggetto array) stesso. Per utilizzare la variabile, devi prima creare un array (contenitore) e assegnarlo alla variabile. Vedere l'esempio seguente.

Fatto 6. Quando creiamo un oggetto array (contenitore), dobbiamo indicare quanto è grande, cioè quante celle contiene. Questo viene fatto con un'istruzione come: new TypeName[n];

Fatto 7. La lunghezza di un array può essere trovata usando la .lengthproprietà.

Fatto 8. Dopo aver creato un array, non è possibile modificare il tipo dei suoi elementi o il numero di elementi che memorizza.

Codice Spiegazione
String s;
String[] list;
sè null
listènull
list = new String[10];
int n = list.length;
La listvariabile memorizza un riferimento a un oggetto: un array di stringhe costituito da 10elementi.
nÈ10
list = new String[0];

Ora listsi riferisce a una matrice di 0elementi. L'array esiste, ma non può memorizzare alcun elemento.

list = null;
System.out.println(list[1]);
Verrà generata un'eccezione (errore di programma), ovvero il programma andrà in crash. listmemorizza un riferimento anull
list = new String[10];
System.out.println(list[10]);
Verrà generata un'eccezione di array fuori dai limiti (errore di programma).
Se listmemorizza 10elementi/celle, allora gli indici validi sono: 0 1 2 3 4 5 6 7 8 910elementi.