1. String
array
Jeg vil gjerne gi deg en kort oversikt over String
arrays.
Som vi sa tidligere, kan en matrise være av hvilken som helst type. Dette betyr at du kan lage en rekke String
s. 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:
|
Opprett et Scanner objekt 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 int
med String
når vi opprettet matrisen. Vel, og når vi leste strengen fra tastaturet, erstattet vi også nextInt()
metoden med nextLine()
.
2. String
array i minnet
Og enda et nyttig faktum. La oss vurdere 3 bilder:
Bilde 1. Hvordan et String
objekt er ordnet 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 String
variabel lagrer adressen (referansen) til et objekt som lagrer teksten.
Bilde 2. Hvordan en heltallsmatrise er ordnet i minnet:
Dette bildet er også kjent.
Bilde 3. Hvordan en strengarray er ordnet i minnet:
Til venstre ser vi en matrisevariabel hvis type er String[]
(den lagrer adressen til et matriseobjekt).
I midten har vi String
selve array-objektet.
Og til høyre er strengobjekter som lagrer noe tekst.
Cellene i String
matrisen lagrer ikke strengene i seg selv (teksten til String-objektene). I stedet lagrer de adressene sine (referanser til dem). På samme måte som String
variabler lagrer adressene til strengobjekter (hvor teksten er lagret).
Ta dette i betraktning når du sammenligner matriseceller:
|
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"};