1. Arrays i hukommelsen

I de foregående eksempler var illustrationerne lidt unøjagtige.

Når du opretter arrays (som når du opretter strenge), allokeres to separate hukommelsesblokke: en til lagring af selve arrayet (beholderen) og en anden blok til den variabel, der gemmer dens adresse . Billedet nedenfor repræsenterer denne afklaring:

Arrays i hukommelsen

Hukommelsen, der er allokeret til arrayet af 10 intelementer og int[]variablen, der gemmer arrayets adresseint , er vist med grønt.

Til sammenligning er en almindelig intvariabel, der lagrer værdien, 199vist med blåt.

Dette minder lidt om at gemme strenge i hukommelsen, synes du ikke?

Det er rigtigt, strenge. Og ligesom når du arbejder med strenge, kan du tildele arrayvariabler til hinanden:

Kode Forklaring
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Opret en række 10 intelementer.
Tildel værdien 4til cellen med indeks 2.
Tildel værdien 9til cellen med indeks 7. Gem adressen gemt i variablen
i variablen. Peg nu på det samme array-objekt i hukommelsen. I matrixobjektets celle med indeks skal du skrive summen af ​​de værdier, der er gemt i celler (som gemmer værdien ) og (som gemmer værdien ). ba
ab
92479

Array-objektet forbliver lige hvor det var, og avariablerne bog gemmer den samme adresse (reference) til det samme objekt. Se på billedet:

Arrays i hukommelsen 2

2. Flere detaljer om at arbejde med arrays

Du kan oprette en række elementer af absolut enhver type. For at gøre dette skal du blot skrive firkantede parenteser efter typenavnet. Generelt ser det sådan ud at oprette et array:

type[] name = new type[number];

Hvor type er typen af ​​de elementer, vi vil gemme i arrayet. Navn er navnet på den variabel, vi vil bruge til at henvise til arrayet, og nummer er antallet af celler i arrayet.

Eksemplet ovenfor er den kanoniske form til at skabe en matrixvariabel og et matrixobjekt. I virkeligheden er disse to separate enheder.

Du kan oprette en matrixvariabel separat fra et matrixobjekt:

type[] name;
name = new type[number];

Og endnu et punkt, der ikke er ubetydeligt:

Du kan bruge variabler eller endda hele udtryk som indeks-array og antal array-elementer .

Eksempler:

Kode Forklaring
int n = 100;
int[] a = new int[n];
Opret en række nelementer
int n = 100;
int[] a = new int[n * 2 + 3];
Opret et array med 203elementer
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
Vigtig:
I øvrigt skal du være opmærksom på, at hvis du forsøger at få adgang til en matrixcelle ved hjælp af et indeks, der ikke eksisterer for matrixen (i vores eksempel betyder det ethvert heltal, der ikke er i området ), så vil programmet gå ned med 0..99en ArrayIndexOfBoundException, hvilket betyder, at indekset var uden for arrayets grænser.

3. Array længde

Som du så i det foregående eksempel, kan du oprette en array-variabel for sig selv og derefter tildele en værdi (en reference til et array-objekt) til den et sted i koden. Du kan endda gøre dette:

Kode Forklaring
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Opret en matrixvariabel, hvis type er int[]
Hvis avariablen er mindre end 10,
så opret en matrix af 10elementer.
Ellers
opret en række 20elementer

Og hvad kan du ellers gøre med sådan et array? Hvordan ved du, hvor mange elementer der er i det?

For at hjælpe med dette har arrays en speciel egenskab (variabel) ved navn length. Du kan finde længden af ​​et array ved at bruge dette udtryk:

array.length;

Her arrayer arrayvariablens navn og lengther navnet på arrayets egenskab. Værdien af length​​egenskaben kan ikke ændres: lengthegenskaben selv kan tildeles andre variabler, men intet kan tildeles til den (hvis du prøver at gøre dette, vil programmet simpelthen ikke kompilere).

Vi kan fortsætte med det forrige eksempel sådan her:

Kode Forklaring
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
Opret en matrixvariabel, hvis type er int[]
Hvis avariablen er mindre end 10,
så opret en matrix af 10elementer.
Ellers
opret et array af 20elementer
Loop over alle elementerne i arrayet: fra 0til længdearray.length - 1

4. Sammenfatning af fakta om arrays i Java

Lad os opsummere, hvad vi ved om arrays:

Fakta 1. Et array består af mange celler.

Fakta 2. Du tilgår en bestemt celle ved at bruge dens nummer (indeks).

Faktum 3. Alle celler er af samme type.

Fakta 4. Startværdien af ​​alle celler er 0 (hvis cellerne gemmer tal), null(hvis cellerne gemmer objektreferencer), eller false(hvis cellerne gemmer booleanværdier). Du vil lære mere om standardværdier i dette kapitel .

Faktum 5. String[] list er blot erklæringen af ​​en variabel. Dette opretter ikke selve containeren (array-objektet). For at bruge variablen skal du først oprette et array (container) og tildele det til variablen. Se eksemplet nedenfor.

Fakta 6. Når vi opretter et array-objekt (container), skal vi angive, hvor stort det er, altså hvor mange celler det indeholder. Dette gøres med et udsagn som: new TypeName[n];

Fakta 7. Længden af ​​et array kan findes ved hjælp af egenskaben .length.

Fakta 8. Efter at have oprettet et array, kan du ikke ændre typen af ​​dets elementer eller antallet af elementer, det gemmer.

Kode Forklaring
String s;
String[] list;
ser null
listernull
list = new String[10];
int n = list.length;
Variablen listgemmer en reference til et objekt: en strengmatrix bestående af 10elementer.
ner10
list = new String[0];

Refererer nu listtil en række 0elementer. Arrayet eksisterer, men det kan ikke gemme nogen elementer.

list = null;
System.out.println(list[1]);
En undtagelse (programfejl) vil blive kastet, dvs. programmet vil gå ned. listgemmer en henvisning tilnull
list = new String[10];
System.out.println(list[10]);
En array-out-of-bounds-undtagelse (programfejl) vil blive genereret.
Hvis a listgemmer 10elementer/celler, er de gyldige indekser: 0 1 2 3 4 5 6 7 8 910elementer.