1. Arrayer i minnet

I de tidigare exemplen var illustrationerna lite felaktiga.

När du skapar arrayer (som när du skapar strängar) allokeras två separata minnesblock: ett för att lagra själva arrayen (behållaren) och ett andra block för variabeln som lagrar dess adress . Bilden nedan representerar detta förtydligande:

Arrayer i minnet

Minnet som allokerats för arrayen av 10 intelement och int[]variabeln som lagrar arrayens adressint visas i grönt.

Som jämförelse visas en vanlig intvariabel som lagrar värdet i blått.199

Det här påminner lite om att lagra strängar i minnet, tycker du inte?

Just det, strängar. Och precis som när du arbetar med strängar kan du tilldela arrayvariabler till varandra:

Koda Förklaring
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Skapa en rad 10 intelement.
Tilldela värdet 4till cellen med index 2.
Tilldela värdet 9till cellen med index 7. Spara adressen som är lagrad i variabeln
i variabeln . Peka nu på samma arrayobjekt i minnet. I arrayobjektets cell med index skriver du summan av värdena som är lagrade i celler ( som lagrar värdet ) och (som lagrar värdet ) . ba
ab
92479

Arrayobjektet stannar precis där det var, och avariablerna boch lagrar samma adress (referens) till samma objekt. Titta på bilden:

Arrayer i minnet 2

2. Mer information om att arbeta med arrayer

Du kan skapa en rad element av absolut vilken typ som helst. För att göra detta, skriv helt enkelt hakparenteser efter typnamnet. Generellt sett ser det ut så här att skapa en array:

type[] name = new type[number];

Där typ är typen av element som vi kommer att lagra i arrayen. Namn är namnet på variabeln vi kommer att använda för att referera till arrayen, och nummer är antalet celler i arrayen.

Exemplet ovan är den kanoniska formen för att skapa en arrayvariabel och arrayobjekt. I verkligheten är dessa två separata enheter.

Du kan skapa en arrayvariabel separat från ett arrayobjekt:

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

Och en till punkt som inte är oväsentlig:

Du kan använda variabler eller till och med hela uttryck som indexmatris och antal matriselement .

Exempel:

Koda Förklaring
int n = 100;
int[] a = new int[n];
Skapa en rad nelement
int n = 100;
int[] a = new int[n * 2 + 3];
Skapa en array med 203element
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];
Viktig:
Förresten, du bör vara medveten om att om du försöker komma åt en arraycell med ett index som inte finns för arrayen (i vårt exempel betyder det vilket heltal som helst som inte finns i intervallet ), då kommer programmet att krascha med 0..99en ArrayIndexOfBoundException, vilket betyder att indexet var utanför gränserna för arrayen.

3. Arraylängd

Som du såg i föregående exempel kan du skapa en arrayvariabel för sig själv och sedan tilldela ett värde (en referens till ett arrayobjekt) till den någonstans i koden. Du kan till och med göra detta:

Koda Förklaring
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Skapa en matrisvariabel vars typ är int[]
Om avariabeln är mindre än 10,
skapa en matris med 10element.
Skapa annars
en rad 20element

Och nu vad mer kan du göra med en sådan array? Hur vet du hur många element som finns i den?

För att hjälpa till med detta har arrayer en speciell egenskap (variabel) som heter length. Du kan hitta längden på en array med detta uttryck:

array.length;

Här arrayär arrayvariabelns namn och lengthär namnet på arrayens egenskap. Värdet på lengthegenskapen kan inte ändras: lengthegenskapen i sig kan tilldelas andra variabler, men ingenting kan tilldelas den (om du försöker göra detta kommer programmet helt enkelt inte att kompilera).

Vi kan fortsätta med det föregående exemplet så här:

Koda Förklaring
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]);
}
Skapa en matrisvariabel vars typ är int[]
Om avariabeln är mindre än 10,
skapa en matris med 10element. Skapa
annars en array av element Slinga över alla element i arrayen: från till längd
20
0array.length - 1

4. Sammanfattning av fakta om arrayer i Java

Låt oss sammanfatta vad vi vet om arrayer:

Fakta 1. En array består av många celler.

Fakta 2. Du kommer åt en specifik cell genom att använda dess nummer (index).

Fakta 3. Alla celler är av samma typ.

Fakta 4. Det initiala värdet för alla celler är 0 (om cellerna lagrar nummer), ( nullom cellerna lagrar objektreferenser) eller false(om cellerna lagrar booleanvärden). Du kommer att lära dig mer om standardvärden i det här kapitlet .

Fakta 5. String[] list är bara deklarationen av en variabel. Detta skapar inte själva behållaren (arrayobjektet). För att använda variabeln måste du först skapa en array (behållare) och tilldela den till variabeln. Se exemplet nedan.

Fakta 6. När vi skapar ett arrayobjekt (container) måste vi ange hur stort det är, dvs hur många celler det innehåller. Detta görs med ett uttalande som: new TypeName[n];

Fakta 7. Längden på en array kan hittas med hjälp av .lengthegenskapen.

Fakta 8. Efter att ha skapat en array kan du inte ändra typen av dess element eller antalet element som den lagrar.

Koda Förklaring
String s;
String[] list;
sär null
listärnull
list = new String[10];
int n = list.length;
Variabeln listlagrar en referens till ett objekt: en strängarray som består av 10element.
när10
list = new String[0];

Nu listhänvisar till en rad 0element. Arrayen finns, men den kan inte lagra några element.

list = null;
System.out.println(list[1]);
Ett undantag (programfel) kommer att skapas, dvs programmet kraschar. listlagrar en referens tillnull
list = new String[10];
System.out.println(list[10]);
Ett array-out-of-bounds-undantag (programfel) kommer att genereras.
Om a listlagrar 10element/celler är de giltiga indexen: 0 1 2 3 4 5 6 7 8 910element.