1. String
array
Jag skulle vilja ge dig en kort översikt om String
arrayer.
Som vi sa tidigare kan en array vara av vilken typ som helst. Det betyder att du kan skapa en array av String
s. Om vi ville skriva ett program som "läser 10 rader från tangentbordet och visar dem i omvänd ordning", så här skulle koden se ut:
|
Skapa ett Scanner objekt Skapa ett arrayobjekt med 10 element Loop från 0 till 9 Läs en sträng från tangentbordet och spara den i nästa cell i matrisen Loop från 9 till 0 Visa nästa cell i matrisen |
Koden ändrades knappt! Vi behövde bara ersätta int
med String
när vi skapade arrayen. Tja, och när vi läste strängen från tangentbordet bytte vi också ut nextInt()
metoden med nextLine()
.
2. String
array i minnet
Och ytterligare ett användbart faktum. Låt oss överväga 3 bilder:
Bild 1. Hur ett String
objekt är ordnat i minnet:
Den här bilden är tagen från tidigare lektioner.
Observera att texten i strängen inte lagras direkt i variabeln: ett separat minnesblock tilldelas den. En String
variabel lagrar adressen (referensen) till ett objekt som lagrar texten.
Bild 2. Hur en heltalsmatris är ordnad i minnet:
Den här bilden är också bekant.
Bild 3. Hur en strängarray är ordnad i minnet:
Till vänster ser vi en arrayvariabel vars typ är String[]
(den lagrar adressen till ett arrayobjekt).
I mitten har vi String
själva arrayobjektet.
Och till höger finns strängobjekt som lagrar lite text.
Cellerna i String
arrayen lagrar inte själva strängarna (texten i String-objekten). Istället lagrar de sina adresser (referenser till dem). På samma sätt som String
variabler lagrar adresserna till strängobjekt (där texten lagras).
Ta hänsyn till detta när du jämför arrayceller:
|
Skapa en array med 10 strängar Lägg värden i arrayen true (referenserna är lika) false (referenserna är inte lika) (true strängarna är lika) true (strängarna är fortfarande lika) |
3. Snabb arrayinitiering i Java
Arrayer är superanvändbara, så Javas skapare försökte göra arbetet med dem så bekvämt som möjligt.
Det första de gjorde var att förenkla arrayinitiering, processen genom vilken du anger de initiala värdena för en array.
När allt kommer omkring, förutom data som läses från någonstans, behöver ett program också ganska ofta sina egna interna data för att fungera. Anta till exempel att vi behöver lagra längderna för varje månad i en array. Så här 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 tack vare Javas skapare finns det ett sätt att skriva detta mer kortfattat:
// Lengths of months of the year
int[] months = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Du kan helt enkelt lista alla värden i arrayen, separerade med kommatecken!
Bekvämt, eller hur? Men det är inte allt.
När det händer kan kompilatorn bestämma typen av behållaren (arrayobjekt) baserat på typen av värden för arrayen. Och för att bestämma längden på arrayen är det trivialt att räkna antalet element skrivna i de lockiga hängslen.
Det betyder att den här koden kan skrivas ännu kortare:
// Lengths of months of the year
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
En sak av skönhet, eller hur? 🙂
Detta kallas "snabb arrayinitiering". Förresten, det här fungerar för andra typer än 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