1. String
matrice
Aș dori să vă ofer o scurtă prezentare generală despre String
matrice.
După cum am spus anterior, o matrice poate fi de orice tip. Aceasta înseamnă că puteți crea o matrice de String
s. Dacă am vrea să scriem un program care „citește 10 linii de la tastatură și le afișează în ordine inversă”, iată cum ar arăta codul:
|
Creați un Scanner obiect Creați un obiect matrice de 10 elemente Buclă de la 0 la 9 Citiți un șir de caractere de la tastatură și salvați-l în următoarea celulă a matricei Buclă de la 9 la 0 Afișați următoarea celulă din matrice |
Codul abia s-a schimbat! A trebuit să înlocuim doar int
cu String
atunci când am creat matricea. Ei bine, și când citim șirul de pe tastatură, am înlocuit și nextInt()
metoda cu nextLine()
.
2. String
matrice în memorie
Și încă un fapt util. Să luăm în considerare 3 imagini:
Imaginea 1. Cum String
este aranjat un obiect în memorie:
Această poză a fost luată din lecțiile anterioare.
Vă rugăm să rețineți că textul șirului de caractere nu este stocat direct în variabilă: pentru acesta este alocat un bloc separat de memorie. O String
variabilă stochează adresa (referința) unui obiect care stochează textul.
Imaginea 2. Cum este aranjată o matrice întregă în memorie:
Această imagine este, de asemenea, familiară.
Imaginea 3. Cum este aranjată o matrice de șiruri în memorie:
În stânga vedem o variabilă matrice al cărei tip este String[]
(stochează adresa unui obiect matrice).
În mijloc, avem String
obiectul matrice în sine.
Și în dreapta sunt obiecte șir care stochează ceva text.
Celulele matricei String
nu stochează șirurile în sine (textul obiectelor String). În schimb, își stochează adresele (referințele la acestea). În același mod în care String
variabilele stochează adresele obiectelor șir (unde este stocat textul).
Luați în considerare acest lucru atunci când comparați celulele matrice:
|
Creați o matrice de 10 șiruri Pune valori în matrice true (referențele sunt egale) false (referențele nu sunt egale)true (șirurile sunt egale) true (șirurile sunt încă egale) |
3. Inițializare rapidă a matricei în Java
Matricele sunt super utile, așa că creatorii Java au încercat să facă lucrul cu ele cât mai convenabil posibil.
Primul lucru pe care l-au făcut a fost să simplifice inițializarea matricei, procesul prin care furnizați valorile inițiale ale unei matrice.
La urma urmei, pe lângă datele citite de undeva, un program are și destul de des nevoie de propriile sale date interne pentru a funcționa. De exemplu, să presupunem că trebuie să stocăm lungimile fiecărei luni într-o matrice. Iată cum ar putea arăta codul:
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
Dar datorită creatorilor Java, există o modalitate de a scrie acest lucru mai concis:
// Lengths of months of the year
int[] months = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Pur și simplu puteți enumera toate valorile matricei, separate prin virgule!
Convenabil, nu? Dar asta nu este tot.
După cum se întâmplă, compilatorul poate determina tipul de container (obiect matrice) în funcție de tipul valorilor matricei. Și pentru a determina lungimea matricei, este trivial să numărăm numărul de elemente scrise în acolade.
Asta înseamnă că acest cod poate fi scris și mai scurt:
// Lengths of months of the year
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Un lucru frumos, nu-i așa? 🙂
Aceasta se numește „inițializare rapidă a matricei”. Apropo, acest lucru funcționează pentru alte tipuri decât 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