1. Matriser i minnet
I de forrige eksemplene var illustrasjonene litt unøyaktige.
Når du oppretter matriser (som når du oppretter strenger), tildeles to separate minneblokker: en for å lagre selve matrisen (beholderen) og en andre blokk for variabelen som lagrer adressen . Bildet nedenfor representerer denne avklaringen:

Minnet som er tildelt for arrayen av 10 intelementer og int[]variabelen som lagrer adressen til intarrayet, vises i grønt.
Til sammenligning vises en ordinær intvariabel som lagrer verdien i blått.199
Dette minner litt om å lagre strenger i minnet, synes du ikke?
Det stemmer, strenger. Og akkurat som når du arbeider med strenger, kan du tilordne matrisevariabler til hverandre:
| Kode | Forklaring |
|---|---|
|
Lag en rekke 10 intelementer. Tilordne verdien 4til cellen med indeks 2. Tilordne verdien 9til cellen med indeks 7. I bvariabelen lagrer du adressen som er lagret i avariabelen. Nå aog bpek på det samme array-objektet i minnet. I matriseobjektets celle med indeks 9skriver du summen av verdiene som er lagret i celler 2(som lagrer verdien 4) og 7(som lagrer verdien 9). |
Matriseobjektet forblir akkurat der det var, og avariablene og blagrer den samme adressen (referansen) til det samme objektet. Se på bildet:
2. Flere detaljer om arbeid med matriser
Du kan lage en rekke elementer av absolutt hvilken som helst type. For å gjøre dette, skriv ganske enkelt hakeparenteser etter typenavnet. Generelt ser det slik ut å lage en matrise:
type[] name = new type[number];
Der type er typen av elementene vi vil lagre i matrisen. Navn er navnet på variabelen vi skal bruke for å referere til matrisen, og tall er antall celler i matrisen.
Eksemplet ovenfor er den kanoniske formen for å lage en matrisevariabel og et matriseobjekt. I virkeligheten er dette to separate enheter.
Du kan opprette en matrisevariabel separat fra et matriseobjekt:
type[] name;
name = new type[number];
Og ett poeng til som ikke er uvesentlig:
Eksempler:
| Kode | Forklaring |
|---|---|
|
Lag en rekke nelementer |
|
Lag en matrise med 203elementer |
|
|
0..99en ArrayIndexOfBoundException, som betyr at indeksen var utenfor arrayens grenser.
3. Matriselengde
Som du så i forrige eksempel, kan du lage en matrisevariabel for seg selv og deretter tilordne en verdi (en referanse til et matriseobjekt) til den et sted i koden. Du kan til og med gjøre dette:
| Kode | Forklaring |
|---|---|
|
Opprett en matrisevariabel hvis type er int[]Hvis avariabelen er mindre enn 10, så opprett en matrise med 10elementer. Ellers lag en rekke 20elementer |
Og hva annet kan du gjøre med en slik matrise? Hvordan vet du hvor mange elementer som er i den?
For å hjelpe med dette har arrays en spesiell egenskap (variabel) kalt length. Du kan finne lengden på en matrise ved å bruke dette uttrykket:
array.length;
Her arrayer array-variabelens navn og lengther navnet på array-egenskapen. Verdien av lengthegenskapen kan ikke endres: lengthegenskapen i seg selv kan tilordnes til andre variabler, men ingenting kan tilordnes den (hvis du prøver å gjøre dette, vil programmet ganske enkelt ikke kompilere).
Vi kan fortsette med forrige eksempel slik:
| Kode | Forklaring |
|---|---|
|
Opprett en matrisevariabel hvis type er int[]Hvis avariabelen er mindre enn 10, så opprett en matrise med 10elementer. Ellers lag en matrise med 20elementer Loop over alle elementene i matrisen: fra 0til lengdearray.length - 1 |
4. Oppsummering av fakta om arrays i Java
La oss oppsummere hva vi vet om matriser:
Fakta 1. En matrise består av mange celler.
Fakta 2. Du får tilgang til en bestemt celle ved å bruke dens nummer (indeks).
Fakta 3. Alle celler er av samme type.
Fakta 4. Startverdien til alle cellene er 0 (hvis cellene lagrer tall), null(hvis cellene lagrer objektreferanser), eller false(hvis cellene lagrer booleanverdier). Du vil lære mer om standardverdier i dette kapittelet .
Fakta 5. String[] list er bare deklarasjonen av en variabel. Dette oppretter ikke selve beholderen (array-objektet). For å bruke variabelen må du først opprette en matrise (beholder) og tilordne den til variabelen. Se eksempelet nedenfor.
Fakta 6. Når vi lager et array-objekt (container), må vi angi hvor stort det er, altså hvor mange celler det inneholder. Dette gjøres med en uttalelse som: new TypeName[n];
Fakta 7. Lengden på en matrise kan bli funnet ved å bruke .lengthegenskapen.
Fakta 8. Etter å ha opprettet en matrise, kan du ikke endre typen av elementene eller antall elementer den lagrer.
| Kode | Forklaring |
|---|---|
|
ser nulllisternull |
|
Variabelen listlagrer en referanse til et objekt: en strengmatrise som består av 10elementer. ner10 |
|
Refererer nå |
|
Et unntak (programfeil) vil bli kastet, dvs. programmet vil krasje. listlagrer en referanse tilnull |
|
Et array-out-of-bounds-unntak (programfeil) vil bli generert. Hvis a listlagrer 10elementer/celler, er de gyldige indeksene: 0 1 2 3 4 5 6 7 8 9— 10elementer. |
GO TO FULL VERSION