1. Matrice în memorie

În exemplele anterioare, ilustrațiile erau puțin inexacte.

La crearea matricelor (ca și la crearea șirurilor de caractere), sunt alocate două blocuri separate de memorie: unul pentru stocarea matricei ( container) în sine și un al doilea bloc pentru variabila care își stochează adresa . Imaginea de mai jos reprezintă această clarificare:

Matrice în memorie

Memoria alocată pentru tabloul de 10 intelemente și int[]variabila care stochează adresa matricei int, este afișată cu verde.

Pentru comparație, o variabilă obișnuită intcare stochează valoarea 199este afișată cu albastru.

Asta amintește puțin de stocarea șirurilor în memorie, nu crezi?

Așa e, șiruri. Și la fel ca atunci când lucrați cu șiruri de caractere, puteți atribui variabile de matrice unul altuia:

Cod Explicaţie
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Creați o serie de 10 intelemente.
Atribuiți valoarea 4celulei cu index 2.
Atribuiți valoarea 9celulei cu index 7.
În bvariabilă, salvați adresa stocată în avariabilă.
Acum ași bindicați către același obiect matrice din memorie.
În celula obiectului matrice cu index 9, scrieți suma valorilor care sunt stocate în celule 2(care stochează valoarea 4) și 7(care stochează valoarea 9).

Obiectul matrice rămâne exact unde a fost, iar variabilele ași bstochează aceeași adresă (referință) la același obiect. Uitate la imagine:

Matrice în memorie 2

2. Mai multe detalii despre lucrul cu matrice

Puteți crea o serie de elemente de absolut orice tip. Pentru a face acest lucru, pur și simplu scrieți paranteze drepte după numele tipului. În general, crearea unei matrice arată astfel:

type[] name = new type[number];

Unde tip este tipul elementelor pe care le vom stoca în matrice. Nume este numele variabilei pe care o vom folosi pentru a face referire la matrice, iar numărul este numărul de celule din matrice.

Exemplul de mai sus este forma canonică pentru crearea unei variabile matrice și a unui obiect matrice. În realitate, acestea sunt două entități separate.

Puteți crea o variabilă matrice separat de un obiect matrice:

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

Și încă un punct care nu este de neînsemnat:

Puteți utiliza variabile sau chiar expresii întregi ca matrice index și număr de elemente ale matricei .

Exemple:

Cod Explicaţie
int n = 100;
int[] a = new int[n];
Creați o serie de nelemente
int n = 100;
int[] a = new int[n * 2 + 3];
Creați o matrice cu 203elemente
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];
Important:
Apropo, ar trebui să știți că, dacă încercați să accesați o celulă de matrice folosind un index care nu există pentru matrice (în exemplul nostru, asta înseamnă orice număr întreg care nu se află în intervalul ), atunci programul se va bloca cu 0..99un ArrayIndexOfBoundException, ceea ce înseamnă că indexul era în afara limitelor matricei.

3. Lungimea matricei

După cum ați văzut în exemplul anterior, puteți crea o variabilă matrice de la sine și apoi îi puteți atribui o valoare (o referință la un obiect matrice) undeva în cod. Poți chiar să faci asta:

Cod Explicaţie
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Creați o variabilă matrice al cărei tip este int[]
Dacă avariabila este mai mică decât 10,
atunci creați o matrice de 10elemente.
În caz contrar,
creați o serie de 20elemente

Și acum ce altceva poți face cu o astfel de matrice? De unde știi câte elemente sunt în el?

Pentru a ajuta la aceasta, tablourile au o proprietate specială (variabilă) numită length. Puteți găsi lungimea unui tablou folosind această expresie:

array.length;

Aici arrayeste numele variabilei matricei și lengtheste numele proprietății matricei. Valoarea proprietății lengthnu poate fi modificată: lengthproprietatea în sine poate fi atribuită altor variabile, dar nu i se poate atribui nimic (dacă încercați să faceți acest lucru, programul pur și simplu nu se va compila).

Putem continua cu exemplul anterior astfel:

Cod Explicaţie
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]);
}
Creați o variabilă matrice al cărei tip este int[]
Dacă avariabila este mai mică decât 10,
atunci creați o matrice de 10elemente.
În caz contrar,
creați o matrice de 20elemente
Buclă peste toate elementele matricei: de la 0până la lungimearray.length - 1

4. Rezumatul faptelor despre matrice în Java

Să recapitulăm ceea ce știm despre matrice:

Faptul 1. O matrice este formată din mai multe celule.

Faptul 2. Accesați o anumită celulă folosind numărul acesteia (index).

Faptul 3. Toate celulele sunt de același tip.

Faptul 4. Valoarea inițială a tuturor celulelor este 0 (dacă celulele stochează numere), null(dacă celulele stochează referințe la obiecte) sau false(dacă celulele stochează booleanvalori). Veți afla mai multe despre valorile implicite în acest capitol .

Faptul 5. String[] list este doar declarația unei variabile. Acest lucru nu creează containerul (obiectul matrice) în sine. Pentru a utiliza variabila, trebuie mai întâi să creați o matrice (container) și să o atribuiți variabilei. Vezi exemplul de mai jos.

Faptul 6. Când creăm un obiect matrice (container), trebuie să indicăm cât de mare este acesta, adică câte celule conține. Acest lucru se face cu o declarație de genul: new TypeName[n];

Faptul 7. Lungimea unui tablou poate fi găsită folosind .lengthproprietatea.

Faptul 8. După crearea unui tablou, nu puteți modifica tipul elementelor sale sau numărul de elemente pe care le stochează.

Cod Explicaţie
String s;
String[] list;
seste null
listestenull
list = new String[10];
int n = list.length;
Variabila liststochează o referință la un obiect: o matrice de șiruri formată din 10elemente.
neste10
list = new String[0];

Acum listse referă la o serie de 0elemente. Matricea există, dar nu poate stoca niciun element.

list = null;
System.out.println(list[1]);
Se va arunca o excepție (eroare de program), adică programul se va bloca. liststochează o referință lanull
list = new String[10];
System.out.println(list[10]);
Va fi generată o excepție de tip matrice în afara limitelor (eroare de program).
Dacă un liststochează 10elemente/celule, atunci indicii validi sunt: 0 1 2 3 4 5 6 7 8 9​​— 10elemente.