1. String
matrice
Vorrei darvi una breve panoramica sugli String
array.
Come abbiamo detto in precedenza, un array può essere di qualsiasi tipo. Ciò significa che puoi creare un array di String
s. Se volessimo scrivere un programma che "legge 10 righe dalla tastiera e le visualizza in ordine inverso", ecco come sarebbe il codice:
|
Creare un Scanner oggetto Creare un oggetto array di 10 elementi Loop da 0 a 9 Leggere una stringa dalla tastiera e salvarla nella cella successiva dell'array Loop da 9 a 0 Visualizzare la cella successiva nell'array |
Il codice è appena cambiato! Dovevamo sostituire solo int
con String
durante la creazione dell'array. Bene, e durante la lettura della stringa dalla tastiera, abbiamo anche sostituito il nextInt()
metodo con nextLine()
.
2. String
matrice in memoria
E un altro fatto utile. Consideriamo 3 immagini:
Figura 1. Come è organizzato un String
oggetto nella memoria:
Questa foto è stata presa dalle lezioni precedenti.
Si noti che il testo della stringa non è memorizzato direttamente nella variabile: per esso viene allocato un blocco di memoria separato. Una String
variabile memorizza l'indirizzo (riferimento) di un oggetto che memorizza il testo.
Figura 2. Come è organizzato un array di interi in memoria:
Anche questa immagine è familiare.
Figura 3. Come è organizzato un array di stringhe in memoria:
Sulla sinistra vediamo una variabile array il cui tipo è String[]
(memorizza l'indirizzo di un oggetto array).
Nel mezzo, abbiamo String
l'oggetto array stesso.
E sulla destra ci sono oggetti stringa che memorizzano del testo.
Le celle dell'array String
non memorizzano le stringhe stesse (il testo degli oggetti String). Invece, memorizzano i loro indirizzi (riferimenti ad essi). Nello stesso modo in cui String
le variabili memorizzano gli indirizzi degli oggetti stringa (dove è memorizzato il testo).
Tienilo in considerazione quando confronti le celle dell'array:
|
Creare un array di 10 stringhe Inserire i valori nell'array false (i riferimenti sono uguali) false (i riferimenti non sono uguali)true (le stringhe sono uguali) true (le stringhe sono ancora uguali) |
3. Inizializzazione rapida dell'array in Java
Gli array sono super utili, quindi i creatori di Java hanno cercato di rendere il lavoro con loro il più conveniente possibile.
La prima cosa che hanno fatto è stata semplificare l'inizializzazione dell'array, il processo mediante il quale si forniscono i valori iniziali di un array.
Dopotutto, oltre ai dati letti da qualche parte, un programma ha spesso bisogno anche dei propri dati interni per funzionare. Ad esempio, supponiamo di dover memorizzare le lunghezze di ogni mese in un array. Ecco come potrebbe apparire il codice:
int[] months = new int[12];
months[0] = 31; // January
months[1] = 28; // February
months[2] = 31; // March
months[3] = 30; // April
months[4] = 31; // May
months[5] = 30; // June
months[6] = 31; // July
months[7] = 31; // August
months[8] = 30; // September
months[9] = 31; // October
months[10] = 30; // November
months[11] = 31; // December
Ma grazie ai creatori di Java, c'è un modo per scriverlo in modo più conciso:
// Lengths of months of the year
int[] months = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Puoi semplicemente elencare tutti i valori dell'array, separati da virgole!
Comodo, vero? Ma non è tutto.
Di fatto, il compilatore può determinare il tipo di contenitore (oggetto array) in base al tipo dei valori dell'array. E per determinare la lunghezza dell'array, è banale contare il numero di elementi scritti nelle parentesi graffe.
Ciò significa che questo codice può essere scritto ancora più breve:
// Lengths of months of the year
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Una cosa di bellezza, non è vero? 🙂
Questo è chiamato "inizializzazione rapida dell'array". A proposito, questo funziona per tipi diversi da int
...
// Names of months of the year
String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November ", "December"};
GO TO FULL VERSION