1. String
reeks
Ik wil u een kort overzicht geven van String
arrays.
Zoals we eerder zeiden, kan een array van elk type zijn. Dit betekent dat u een array van s kunt maken String
. Als we een programma willen schrijven dat "10 regels van het toetsenbord leest en ze in omgekeerde volgorde weergeeft", ziet de code er als volgt uit:
|
Maak een Scanner object Maak een 10-element array-object Loop van 0 tot 9 Lees een string van het toetsenbord en sla deze op in de volgende cel van de array Loop van 9 tot 0 Geef de volgende cel in de array weer |
De code is amper veranderd! We hoefden alleen te vervangen int
door String
bij het maken van de array. Nou, en bij het lezen van de string van het toetsenbord hebben we de nextInt()
methode ook vervangen door nextLine()
.
2. String
array in het geheugen
En nog een nuttig feit. Laten we 3 foto's bekijken:
Afbeelding 1. Hoe een String
object in het geheugen is gerangschikt:
Deze foto is genomen uit eerdere lessen.
Houd er rekening mee dat de tekst van de string niet direct in de variabele wordt opgeslagen: er wordt een apart geheugenblok voor toegewezen. Een String
variabele slaat het adres (referentie) op naar een object dat de tekst opslaat.
Afbeelding 2. Hoe een integer-array in het geheugen is gerangschikt:
Ook deze foto is bekend.
Afbeelding 3. Hoe een stringarray in het geheugen is gerangschikt:
Aan de linkerkant zien we een array-variabele waarvan het type is String[]
(het slaat het adres op van een array-object).
In het midden hebben we String
het array-object zelf.
En aan de rechterkant zijn stringobjecten die wat tekst opslaan.
De cellen van de String
array slaan de strings zelf niet op (de tekst van de String-objecten). In plaats daarvan slaan ze hun adressen op (referenties daarnaar). Op dezelfde manier waarop String
variabelen de adressen van tekenreeksobjecten opslaan (waar de tekst wordt opgeslagen).
Houd hier rekening mee wanneer u matrixcellen vergelijkt:
|
Maak een array van 10 strings Plaats waarden in de array true (de referenties zijn gelijk) false (de referenties zijn niet gelijk)true (de strings zijn gelijk) true (de strings zijn nog steeds gelijk) |
3. Snelle array-initialisatie in Java
Arrays zijn superhandig, dus de makers van Java probeerden het werken met ze zo gemakkelijk mogelijk te maken.
Het eerste wat ze deden was het vereenvoudigen van de array-initialisatie, het proces waarbij je de beginwaarden van een array opgeeft.
Naast gegevens die ergens vandaan worden gelezen, heeft een programma immers vaak ook eigen interne gegevens nodig om te kunnen werken. Stel dat we de lengte van elke maand in een array moeten opslaan. Dit is hoe de code eruit zou kunnen zien:
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
Maar dankzij de makers van Java is er een manier om dit beknopter te schrijven:
// Lengths of months of the year
int[] months = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
U kunt eenvoudig alle waarden van de array weergeven, gescheiden door komma's!
Handig toch? Maar dat is niet alles.
De compiler kan namelijk het type container (array-object) bepalen op basis van het type waarden van de array. En om de lengte van de array te bepalen, is het triviaal om het aantal elementen te tellen dat tussen de accolades staat.
Dat betekent dat deze code nog korter kan worden geschreven:
// Lengths of months of the year
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Een ding van schoonheid, is het niet? 🙂
Dit wordt "snelle array-initialisatie" genoemd. Dit werkt trouwens voor andere typen dan 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