1. Stringmatrice

Vorrei darvi una breve panoramica sugli Stringarray.

Come abbiamo detto in precedenza, un array può essere di qualsiasi tipo. Ciò significa che puoi creare un array di Strings. Se volessimo scrivere un programma che "legge 10 righe dalla tastiera e le visualizza in ordine inverso", ecco come sarebbe il codice:

Scanner console = new Scanner(System.in);
String[] array = new String[10];
for (int i = 0; i < 10; i++)
{
   array[i] = console.nextLine();
}
for (int i = 9; i >= 0; i--)
{
   System.out.println(array[i]);
}
Creare un Scanneroggetto
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 intcon Stringdurante la creazione dell'array. Bene, e durante la lettura della stringa dalla tastiera, abbiamo anche sostituito il nextInt()metodo con nextLine().


2. Stringmatrice in memoria

E un altro fatto utile. Consideriamo 3 immagini:

Figura 1. Come è organizzato un Stringoggetto nella memoria:

Array di stringhe in 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 Stringvariabile memorizza l'indirizzo (riferimento) di un oggetto che memorizza il testo.

Figura 2. Come è organizzato un array di interi in memoria:

Array di stringhe in memoria 2

Anche questa immagine è familiare.

Figura 3. Come è organizzato un array di stringhe in memoria:

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 Stringl'oggetto array stesso.

E sulla destra ci sono oggetti stringa che memorizzano del testo.

Le celle dell'array Stringnon memorizzano le stringhe stesse (il testo degli oggetti String). Invece, memorizzano i loro indirizzi (riferimenti ad essi). Nello stesso modo in cui Stringle variabili memorizzano gli indirizzi degli oggetti stringa (dove è memorizzato il testo).

Tienilo in considerazione quando confronti le celle dell'array:

String[] array = new String[10];

array[1] = "Hello";
array[2] = array[1];
array[3] = new String("Hello");
// Compare
array[1] == array[2];
array[1] == array[3];
array[1].equals(array[3]);
array[1].equalsIgnoreCase(array[3]);
Creare un array di 10 stringhe

Inserire i valori nell'array



true (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"};