1. Stringarray

Jeg vil gjerne gi deg en kort oversikt over Stringarrays.

Som vi sa tidligere, kan en matrise være av hvilken som helst type. Dette betyr at du kan lage en rekke Strings. Hvis vi ønsket å skrive et program som "leser 10 linjer fra tastaturet og viser dem i omvendt rekkefølge," her er hvordan koden vil se ut:

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]);
}
Opprett et Scannerobjekt
Lag et 10-elements matriseobjekt
Loop fra 0 til 9

Les en streng fra tastaturet og lagre den i neste celle i matrisen
Loop fra 9 til 0

Vis neste celle i matrisen

Koden endret seg knapt! Vi måtte bare erstatte intmed Stringnår vi opprettet matrisen. Vel, og når vi leste strengen fra tastaturet, erstattet vi også nextInt()metoden med nextLine().


2. Stringarray i minnet

Og enda et nyttig faktum. La oss vurdere 3 bilder:

Bilde 1. Hvordan et Stringobjekt er ordnet i minnet:

Stringarray i minnet

Dette bildet er tatt fra tidligere leksjoner.

Vær oppmerksom på at teksten til strengen ikke lagres direkte i variabelen: en egen minneblokk er tildelt den. En Stringvariabel lagrer adressen (referansen) til et objekt som lagrer teksten.

Bilde 2. Hvordan en heltallsmatrise er ordnet i minnet:

String array i minne 2

Dette bildet er også kjent.

Bilde 3. Hvordan en strengarray er ordnet i minnet:

Hvordan en String-array er ordnet i minnet

Til venstre ser vi en matrisevariabel hvis type er String[](den lagrer adressen til et matriseobjekt).

I midten har vi Stringselve array-objektet.

Og til høyre er strengobjekter som lagrer noe tekst.

Cellene i Stringmatrisen lagrer ikke strengene i seg selv (teksten til String-objektene). I stedet lagrer de adressene sine (referanser til dem). På samme måte som Stringvariabler lagrer adressene til strengobjekter (hvor teksten er lagret).

Ta dette i betraktning når du sammenligner matriseceller:

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]);
Lag en matrise med 10 strenger

Sett verdier inn i matrisen



true (referansene er like)
false (referansene er ikke like)
true (strengene er like)
true(strengene er fortsatt like)


3. Rask array-initialisering i Java

Arrays er super nyttige, så Javas skapere prøvde å gjøre arbeidet med dem så praktisk som mulig.

Det første de gjorde var å forenkle arrayinitialisering, prosessen der du oppgir startverdiene til en array.

Tross alt, i tillegg til data som er lest fra et sted, trenger et program også ganske ofte sine egne interne data for å fungere. Anta for eksempel at vi må lagre lengdene på hver måned i en matrise. Slik kan koden se ut:

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

Men takket være Javas skapere, er det en måte å skrive dette mer konsist på:

// Lengths of months of the year
int[] months = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

Du kan ganske enkelt liste opp alle verdiene til matrisen, atskilt med komma!

Praktisk, ikke sant? Men det er ikke alt.

Som det skjer, kan kompilatoren bestemme typen av beholderen (array-objektet) basert på typen av verdiene til matrisen. Og for å bestemme lengden på matrisen, er det trivielt å telle antall elementer skrevet i de krøllete klammeparentesene.

Det betyr at denne koden kan skrives enda kortere:

// Lengths of months of the year
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

En ting av skjønnhet, er det ikke? 🙂

Dette kalles "rask array-initialisering". Dette fungerer forresten for andre typer enn int...

// Names of months of the year
String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November ", "December"};