Sunteți pe pagina 1din 17

Date primitive i structuri de date Date In informatic, se numeste dat orice entitate asupra creia poate opera calculatorul.

Datele pot fi reprezentate n memoria calculatorului i transmise prin canalele de comunicaii. Se poate pune n eviden caracterul dual al datelor : a. Datele sunt piese de informaie care aparin domeniului problemei: numere, iruri de caractere, imagini, secvene sonore etc. Sub acest aspect, fiecare din ele are o anumit semnificaie , care depinde de rolul ndeplinit n problema respectiv. De exemplu, n probleme diferite, acelai numr ntreg poate fi vrsta unei persoane, numrul de dosare dintr-un birou, numrul de exemplare ale unei cri ntr-o librrie etc. b. Datele sunt structuri simbolice prin care se reprezint piesele de informaie n calculator sau n documentele folosite de om. Sub acest aspect, se ignor semnificaia datelor, punndu-se accentul pe forma de reprezentare a acestora i pe operaiile la care pot fi supuse. Din acest punct de vedere, datele se grupeaz n tipuri de date , astfel c toate datele de acelai tip respect aceleai convenii de reprezentare i suport aceleai operaii. Pentru fiecare tip de date se disting cel puin dou forme de reprezentare: forma intern (cea sub care datele respective sunt stocate n memoria intern i care este destinat folosirii de ctre calculator) i forma extern (sub care datele apar pe hrtie sau pe ecranul terminalului i este destinat folosirii de ctre om i n interfeele om/calculator). De asemenea, aceeai pies de informaie, cu aceeai reprezentare extern, poate fi ncadrat n diferite tipuri de date, cu reprezentri interne distincte. De

exemplu, numarul intreg 127 poate apartine unuia din tipurile byte, short sau int, dac reprezentarea intern este pe 8, 16 sau 32 de bii. Datele pot fi primitive sau structurate. Date primitive Orice limbaj de programare pune la dispoziia programatorului un set de tipuri de date primitive. Pentru fiecare din aceste tipuri se specific: mulimea de valori; forma de reprezentare extern; forma de reprezentare intern (lungimea, exprimat n numr de octei sau de bii i convenia de reprezentare); mulimea de operaii care pot fi aplicate datelor respective i operatorii corespunztori acestor operaii. Este important faptul c toate datele primitive de acelai tip se reprezint n memoria intern n mod uniform, adic au aceeai lungime i respect aceeai convenie de reprezentare. Aceasta faciliteaz organizarea datelor n memoria calculatorului i permite "automatizarea" operaiilor care se fac asupra datelor, prin folosirea unor echipamente i/sau programe corespunzatoare. n limbajul Java, tipurile de date primitive sunt:

date numerice: o ntregi: byte, short, int, long, char ; o reale (in virgul mobil): float, double ; date logice: tipul boolean.

Tipul char din limbajul Java are o situaie deosebit: la nivel conceptual, fiecare valoare de tip char este un caracter, adic un simbol tipografic elementar

(liter, cifr, semn de punctuaie, simbol matematic etc.) sau un caracter special folosit n transmiterea mesajelor (simbol de trecere la linie nou, de ntoarcere a carului, de trecere la pagin nou, etc.); sub aspectul modului de reprezentare n memorie, fiecare caracter este codificat printr-un numar de 16 biti, in Unicode, ceeace permite ca mulimea de valori a tipului char s conin 216 caractere; din punct de vedere al operaiilor admise, tipul char a fost ncadrat n limbajul Java n categoria tipurilor ntregi: orice valoare de tip char este tratat ca un numr ntreg fr semn, fiind permise toate operaiile pentru astfel de numere.

Tipuri similare exist i in celelalte limbaje de programare, dar pot diferi att denumirile tipurilor, ct i formele de reprezentare extern i intern a datelor respective. Conceptul de structur de date Foarte frecvent, ntre datele folosite la realizarea unei anumite aplicaii informatice exist relaii (legturi) care pot fi utilizate n elaborarea algoritmilor aplicai n rezolvarea problemelor respective. Se poate considera, deci, c datele nu sunt independente, ci sunt reunite n anumite structuri. Structura de date este un mod de organizare i reprezentare a datelor, care conine att datele propriu-zise, ct i legturile dintre ele. La nivel conceptual , structura de date abstract este o schem care conine componente i relaii ntre aceste componente. Componentele pot fi date primitive sau structuri de date. Pentru fiecare structur se specific i un set de operaii care pot fi efectuate asupra ntregii structuri sau a componentelor ei.

La nivelul implementrii , limbajele de programare furnizeaz mijloace prin care se pot construi anumite structuri de date considerate de baz in limbajul respectiv i - eventual - de construire a unor structuri din ce n ce mai complexe, pornind de la datele primitive i structurile de baz. Operaiile asupra structurilor se implementeaz sub form de funcii sau proceduri. n programarea procedural tradiional, structurile de date i funciile sau procedurile prin care se realizeaz operaiile asupra acestora se implementeaz separat, legtura dintre ele realizndu-se doar la nivel conceptual i nu prin mijloace specifice limbajului folosit. n programarea orientat pe obiecte, structurile de date se realizeaz sub form de clase , care cuprind att datele i legturile dintre ele , ct i metodele prin care se realizeaz operaiile asupra structurii respective. Principalele structuri de date pentru care limbajele de programare procedural ofer mijloace specifice de declarare sunt tabloul i nregistrarea. Structura de tablou Tabloul (engleza: array), numit si vector, matrice sau masiv, este o structur de date omogen cu urmtoarele caracteristici: toate componentele tabloului aparin aceluiai tip de date (de aceea spunem c structura este omogen); componentele tabloului nu au nume, n schimb sunt indexate; prin indici se specific poziia componentei respective n cadrul tabloului; dup numrul de indici, componentele tabloului pot fi plasate pe una, dou sau mai multe direcii n spaiu; dimensiunile tabloului, exprimate prin numrul de componente pe fiecare direcie, sunt fixe (nu se pot modifica n timpul executrii programului).

Structura de tablou are la baz conceptul de matrice din matematic. Astfel, de exemplu, tabloul a = [a0 a1 a2 a3] are patru componente asezate pe o singur direcie n spaiu i au un singur indice, cu valori de la zero la 3. n matematic, un astfel de tablou este o matrice cu o singur linie (numit i vector-linie) dac elementele sunt aezate orizontal, ca n exemplul de mai sus, sau este o matrice cu o singur coloan (un vector-coloan) dac elementele sunt asezate pe o direcie vertical. n prelucrarea pe calculator nu se ia n consideraie orientarea orizontal sau vertical, ci numai faptul c elementele sunt dispuse pe o singura direcie (liniar). n cazul unei matrice cu mai multe linii i coloane, componentele sunt plasate pe dou direcii (ntr-un plan) i au fiecare doi indici, ca n exemplul urmtor: b00 b01 b02 b03 b04 b10 b11 b12 b13 b14 b20 b21 b22 b23 b24 Prin convenie, primul indice specific linia, iar al doilea coloana n care se gsete componenta respectiv. Se consider c matricea are form dreptunghiular, deci toate liniile au aceeai lungime. Remarcm c matricea (tabloul bidimensional) poate fi considerat drept un tablou unidimensional, ale crui componente sunt ele nsele tablouri unidimensionale. De exemplu este un vector-linie, ale crui componente sunt vectori-coloan. Pornind de la aceast observaie, putem extinde conceptul de tablou la mai mult de dou dimensiuni. Putem, astfel, s considerm c un tablou tridimensional (o matrice spaial) este un tablou unidimensional, ale crui componente sunt tablouri bidimensionale. Un astfel de tablou poate fi imaginat ca avnd mai multe "pagini", unde fiecare "pagin" este o matrice bidimensional. n acest caz, componentele au cte trei indici, care indic n mod corespunztor linia, coloana i pagina n care este situat componenta

respectiv. Extinznd la cazul multidimensional, putem considera c un tablou cu n dimensiuni este un tablou unidimensional, ale crui componente sunt tablouri cu n-1 dimensiuni, fiecare component a tabloului avnd n indici.

Structura de tablou a fost introdus n limbajul FORTRAN (1956), fiind prezent n toate limbajele de programare pentru calcule tiinifice i inginereti i n majoritatea celorlalte limbaje de programare de nivel superior. Ca exemple putem da limbajele Fortran, Basic, Pascal, C, C++, Java. Exista, totui, deosebiri ntre aceste limbaje att din punct de vedere al formei sintactice a declaraiei de tablou, ct i n ce privete modul de implementare a tablourilor. n majoritatea limbajelor se consider c ntr-o matrice (tablou bidimensional) toate liniile au aceeai lungime i - n mod corespunztor - ntr-un tablou n-dimensional, toate componentele sale cu n-1 dimensiuni sunt omogene nu numai sub aspectul tipului, ci i al dimensiunilor. Se consider, de asemenea, c tabloul ocup n memorie o zon compact (de unde i denumirea de masiv). Avnd nsa n vedere c memoria calculatorului este o structur liniar (toate locaiile din memorie sunt - conceptual vorbind - dispuse liniar fiind indicate prin adresa lor), nseamn c orice tablou multidimensional trebuie desfurat n memorie pe o singur direcie. Desfurarea pe o singura direcie a elementelor unui tablou se poate face n moduri diferite, depinznd de limbajul folosit. Astfel, n limbajul FORTRAN, se consider c elementele tabloului sunt plasate n memorie coloan dup coloan, n timp ce n limbajele Pascal si C se consider ca desfurarea se face linie dup linie. n consecin, n Pascal i C componentele matricei b din exemplul de mai sus vor fi plasate astfel: b00 b01b02 b03 b04 b10b11 b12 b13 b14 b20 b21 b22 b23 b24. Datorit acestui fapt, se poate considera c, la nivel de implementare, orice tablou multidimensional este echivalent cu unul unidimensional. Se pot stabili formule de calcul, prin care se determin valoarea indicelui

componentei n desfurarea unididimensional a tabloului, dac se cunosc dimensiunile tabloului i valorile indicilor aceleeai componente n amplasarea spaial. De exemplu, n cazul unei matrice cu N linii si M coloane desfurate pe linii (ca n Pascal sau C), ntre indicele k al desfurrii liniare i indicii i,j ai componentei respective a matricei exist urmtoarea relaie: k=i*M+j n exemplul de mai sus, elementul b23 va avea, n desfurarea liniar a tabloului, indicele k=2*5+3=13 . Domeniile de valori ale indicilor depind, de asemenea, de limbajul folosit. n Fortran, indicii sunt numere naturale, primul indice fiind 1. In C, C++ si Java, indicii sunt tot numere ntregi pozitive, dar cel mai mic indice este zero. n Pascal, indicii pot fi numere ntregi, caractere sau tipuri enumerate, iar marginile inferioar i superioar ale intervalului de valori pentru fiecare indice se declar prin program. Despre particularitaile tablourilor n limbajul Java vom discuta separat. Referirea la o component a tabloului se face prin mumele tabloului nsoit de indicele (indicii) componentei respective. n Pascal, C, C++ i Java indicii se scriu ntre paranteze drepte. De exemplu, b[2][3] este componenta din linia 2 i coloana 3 a matricei b. Remarcm, deci, c accesul la orice component a tabloului se face direct, fr a fi necesar parcurgerea celorlalte elemente. Structua de nregistrare n numeroase aplicaii ale calculatoarelor, este necesar s se prelucreze date grupate sub forma de nregistrri , situate fizic fie n fiiere, fie n memoria intern. S considerm, de exemplu, evidena materialelor dintr-o magazie. Fiecare material se caracterizeaz prin mai multe atribute, cum sunt: codul materialului, denumirea

materialului, cantitatea. Informaia despre un material ar putea fi, deci, pstrat pe un formular de hrtie avnd, ca exemplu, urmtorul coninut: MATERIAL
Cod material: 13027522 Denumire material: Pnza alb bumbac Cantitate: 127.53

Prima linie conine titlul formularului, iar urmtoarele linii conin atributele acestuia. Acest formular conine trei date: numrul ntreg 13027522, irul de caractere "Pnz alb de bumbac" i numrul real 127.53. Pentru prelucrarea pe calculator, aceste date sunt grupate ntr-o nregistrare de forma 13027522 Pnz alb de bumbac 127.53

Remarcm deci c aceast structur, care se introduce n memoria calculatorului, conine numai datele, nu i alte informaii, cum ar fi denumirile atributelor i tipurile de date din fiecare cmp. Descrierea acestei structuri se face n program, folosind o instruciune numit declaraie de structur . Forma declaraiei depinde de sintaxa limbajului de programare utilizat. De exemplu, in limbajul Pascal declaraia poate avea forma type Material = record cod: integer; nume: string[30]; cantitate: real end; var a, b, c: Material; Remarcam ca s-a declarat un nou tip de date numit Material, ale crui valori sunt nregistrri (engleza: record), fiecare nregistrare de acest tip fiind o structur de date care conine trei cmpuri. Pentru fiecare din cmpuri se indic numele cmpului i tipul valorii coninute. n continuare, s-a

declarat c a, b i c sunt variabile de tipul Material, deci sunt structuri de date aparinnd acestui tip. In limbajul C, aceleasi declaraii se fac sub forma
typedef struct{ int cod; char nume[30]; double cantitate} Material; Material a, b, c;

S-a schimbat sintaxa declaraiilor, dar semnificata este aceeai ca n Pascal. n ambele limbaje, notaia a.cod nseamn valoarea cmpului cod al nregistrrii (structurii) a, deci un cmp al unei nregistrri este specificat n program sub forma nume_variabil.nume_camp . Structura de nregistrare a fost introdus prima dat n limbajul COBOL (creat n 1959) i este utilizat n toate limbajele care sunt orientate pe folosirea fiierelor sau a bazelor de date, fiind prezent i n unele limbaje de uz general, cum sunt Pascal i C. Remarcm c nici n Pascal, nici n C nu este predefinit un tip de date numit Material, dar limbajul pune la dispoziia programatorului modalitatea prin care el poate s defineasc un astfel de tip. nregistrarea (engl: record) este o structur de date neomogen cu urmtoarele caracteristici:

componentele nregistrrii, numite n mod uzual cmpuri (engl. fields), au fiecare propriul su nume; cmpurile nregistrrii pot aparine unor tipuri de date diferite (de aceea spunem c este o structur neomogen);

n memoria calculatorului cmpurile sunt aezate consecutiv (n linie), ocupnd o zon de memorie compact.

Primele dou caracteristici se refer la conceptul abstract de nregistrare, iar ultima caracteristic se refer la modul de implementare. Cmpurile de date dintr-o nregistare pot conine nu numai date primitive, ci i structuri de date. n particular, orice cmp al unei nregistrri poate fi el nsui o nregistrare. Clasa ca extindere a structurii de nregistrare n limbajele de programare orientate pe obiecte, structura de nregistrare a fost extins, astfel nct n afar de date sa conin i metode, adic funcii sau proceduri prin care se prelucreaz datele respective. S-a obinut astfel conceptul de clas. Remarcm ns c clasa nu mai este o simpl structur de date, ci un modul de program, care conine att date, ct i metode. Se poate deci considera c nregistrarea este un caz particular de clas, care nu conine metode. Se tie c n conceptul de tip de date sunt cuprinse att mulimea de valori, ct i mulimea de operaii aplicabile valorilor respective. Din acest punct de vedere, nregistrarea nu este un tip de date complet definit, deoarece la declararea nregistrrii se descrie numai structura de date, definindu-se astfel numai multimea de valori pe care aceasta le poate avea. Operaiile se fac numai asupra datelor primitive coninute n cmpuri, respectnd conveniile pentru tipul de care aceste campuri aparin. ntruct clasa conine att date, ct i metode, ea se ncadreaz complet n conceptul de tip de date enunat mai sus. Variabile, pointeri i referine

In timpul executrii programului, datele primitive se gsesc n memoria calculatorului sub forma unor valori plasate n anumite zone de memorie. n mod corespunztor, structurile de tablou sau de nregistrare sunt plasate n anumite zone de memorie. Dac, la nivel conceptual, structurile de date sunt plane sau spaiale, valorile componentelor acestora sunt aezate n zona de memorie alocat structurii, respectnd o anumit convenie de desfurare liniar, cum s-a artat mai sus n cazul tablourilor. Variabila este numele dat n program unei zone de memorie n care se gsete o valoare. Dupa tipul acesteia, valoarea poate fi, n principiu, o dat primitiv sau o structur de date. Operaiile prevzute n program nu se fac asupra variabilelor, ci asupra valorilor acestora. De exemplu, expresia c=a*b este interpretat astfel: se inmulteste valoarea variabilei a cu valoarea variabilei b, iar valoarea rezultata se atribuie variabilei c. Cu alte cuvinte, se nmulete valoarea situat n zona de memorie alocat variabilei a cu valoarea situat n zona de memorie alocat variabilei b, iar valoarea rezultat se pune n zona de memorie alocat variabilei c. Pointerul este o variabil special, a crei valoare este o adres de memorie. Pointerii se folosesc n numeroase limbaje de nivel superior, printre care Pascal, C si C++, dar nu exist n limbajul Java. Asupra pointerilor se pot face operaii de atribuire, adunare cu o constant i afiare. De exemplu, n limbajul C sau C++ declaraia double a, b, *p1, *p2; are semnificaia c a i b sunt variabile de tip double, n timp ce p1 si p2 sunt pointeri la variabile de tip double. Aceasta nseamn c n zonele de memorie care aparin

variabilelor a i b se gsesc chiar valorile acestor variabile (sub forma de date de tip double, pe cte 8 octei), n timp ce n zonele de memorie alocate pentru variabilele p1 i p2 se gsesc adresele la care sunt situate n memorie nite date de tip double (adresele fiind numere ntregi, fr semn, pe doi octei fiecare). Expresia p1=&a are semnificaia c se atribuie ca valoare variabilei p1 adresa la care se gsete n memorie valoarea variabilei a. Pointerului i se poate atribui, ns, ca valoare orice adres din memorie, chiar dac aceasta nu este adresa alocat unei variabile din program, fiind permise, de exemplu, atribuiri de forma p1=1735, sau p2=#7FFF. De asemenea, valoarea pointerului poate fi afiat pe ecran. Totodat, n expresii se pot folosi i valorile indicate de pointeri. Astfel, continuand exemplul de mai sus, expresia *p1/*p2 are semnificatia ca se imparte valoarea de tip double situata in memorie la adresa p1 la valoarea de tip double de la adresa p2, obinndu-se ca rezultat o valoare numeric de tip double. n schimb, expresia p1+3 are semnificaia c la adresa care este valoarea pointerului p1 se adaug o cantitate egal cu de trei ori lungimea unei date de tip double (conform tipului pointerului) i se obine o nou adres a unei date de tip double. n limbajul Java nu se folosesc pointeri , dar am avut nevoie de aceste exemple pentru a pune n eviden deosebirea dintre pointeri i referine. Referina este, n programare, o indicaie privind locul n care poate fi gasit o dat sau o structur de date fiind, din acest punct de vedere, o abstractizare a conceptului de adres. Deosebirea dintrereferin i adres este c referina nu este considerat a fi un numr, i deci asupra ei nu pot fi efectuate operaii aritmetice i nici nu poate fi afiat sau supus altor operaii de intrare/iesire.

Variabila referin este o variabil, a crei valoare este o referin. n unele limbaje de programare (de exemplu n Pascal) termenul de "variabil referin" (sau simplu "referin") este folosit ca sinonim al celui de pointer. n limbajul C++ se face distincie ntre pointeri si referine: variabila referin este considerat doar drept un sinonim (un alt nume) al variabilei obinuite. De exemplu, n C++ instruciunea
double a=17.38, b=0.0537, *pa=&a, &ra=a;

are urmatoarea semnificaie: a i b sunt variabile de tip double; ra este o referin ctre a; pa este un pointer la a. La executarea acestei instruciuni se aloc n memorie spaii pentru valorile variabilelor a i b, introducndu-se n zonele corespunzatoare valorile 17.38 si respectiv 0.0537. Se aloc, de asemenea, spaiu pentru pointerul pa, introducndu-se ca valoare iniial adresa zonei de memorie alocat valorii variabilei a (notat n C i C++ prin &a). n schimb, pentru variabila ra nu se aloc spaiu n memorie, ci se consider c ra este un alt nume dat variabilei a. n consecin, valoarea lui ra este situat la aceeasi adres de memorie ca valoarea variabilei a, astfel c orice expresie n care apare ra are acelai efect cu cea n care apare a. In instruciunile urmtoare din program poate s fie modificat valoarea pointerului pa, astfel nct acesta s conin adresa altei variabile (de exemplu prin expresia pa=&b se d pointerului pa ca valoare adresa variabilei b). n schimb referina ra nu mai poate fi modificat n timpul executrii programului, ea ramnnd permanent asociat variabilei a. n limbajul Java, se consider c variabilele simple au ca valori date primitive, iar variabilele referin au ca valori referine la obiecte (la instane ale claselor). In consecin, variabilele referin se comport ca nite pointeri, n sensul c:

variabilei referin i se aloc un spaiu n memorie, n care se introduce ca valoare o referin la un obiect din memorie; prin expresia de atribuire de forma vr1=vr2, in care vr1 si vr2 sunt variabile referin, se d ca valoare variabilei vr1 referina coninut n vr2, astfel c vr1 i vr2 indic acum acelai obiect din memorie; prin expresia de comparaie vr1==vr2 se testeaz dac cele doua variabile referin indic acelai obiect din memorie (deci indic aceeai zon de memorie); prin expresia de comparaie vr1!=vr2 se testeaz dac vr1 i vr2 indic zone de memorie diferite;

Totusi, variabilele referin nu sunt pointeri, deoarece ele nu conin ca valori adrese ci referine. In consecin: referinele (valorile acestor variabile) nu pot fi supuse operaiilor aritmetice i nu pot fi afiate;

crearea valorilor-referin se face numai prin operatorul new, care aloc obiectelor spaiu n memoria dinamic.

Realizarea n limbajul Java a structurilor de clas i de tablou Clasa n limbajul Java, clasa este ea nsi un obiect, mai exact o instan a clasei java.lang.Class , care este prezent n memoria mainii virtuale Java n timpul executrii programului i conine: numele clasei; referina care superclas; referine ctre clasele imbricate; informaii privind cmpurile clasei: nume, tip, modificatori; valorile cmpurilor statice (ale clasei); informaii privind constructorii i metodele: nume, modificatori, tip valoare ntoars, numele i tipul

argumentelor; codurile de octei (bytecode-urile) constructorilor i metodelor.

Toate aceste informaii sunt disponibile n timpul executrii programului prin intermediul metodelor clasei Class, ceeace nu se ntampl n cazul altor limbaje de programare compilate, cum ar fi Pascal, C sau C++. Instanele oricrei clase sunt, de asemenea, obiecte i conin:

referina la clasa de care aparin; referine ctre instanele claselor interioare (nestatice); valorile cmpurilor de date ale instanei (nestatice).

Obiectul este deci o simpl structur de date , care nu conine constructori sau metode. n privina valorilor coninute n cmpuri, reamintim c n Java cmpurile de date care aparin unor tipuri primitive conin chiar valorile primitive respective, n timp ce cmpurile destinate unor obiecte conin, de fapt, referine ctre acele obiecte. Tabloul n limbajul Java, reprezentarea tabloului ca un masiv de date, ale crui componente ocup n memorie o zon compact rmne valabil numai pentru tablourile unidimensionale cu componente de tipuri primitive. Totui, chiar i aceste tablouri, se deosebesc de cele din alte limbaje: n Java, tabloul este un obiect, care - n afar de componentele propriu-zise - conine i un cmp de tip int numit length, care are ca valoare numrul de componente. n consecin, dac tab este un tablou, atunci tab.length este numrul de componente ale acestui tablou. Tablourile multidimensionale sunt implementate prin structuri arborescente, n care frunzele sunt componentele

propriu-zise, iar fiecare nod intermediar de nivel k este un tablou unidimensional, ale crui componente sunt referine la nodurile de nivel k+1. n aceste condiii dispare i cerina de omogenitate a dimensiunilor subtablourilor unui tablou. De exemplu, nu mai este necesar ca toate liniile unei matrice sa aib acelai numr de coloane. n schimb, pentru tablourile cu componente de tipuri primitive, se pstreaz condiia omogenitaii de tip a componentelor. De exemplu, n instruciunea double b[][]=new double[3][5]; se creeaz un tablou cu 3 linii si 5 coloane ale crui elemente sunt toate de tip double. Aceast matrice este implementat printr-un tablou unidimensional cu 3 componente, care sunt referine la trei tablouri unidimensionale cu cte cinci elemente de tip double i sunt liniile matricei. Remarcm c, ntruct fiecare nod al structurii arborescente, prin care se implementeaz in Java tabloul multidimensional, este un tablou unidimensional, acesta conine i campul length. n consecin, n cazul matricei bdin exemplul de mai sus, expresia b.length are valoarea 3 si reprezint numarul de linii al matricei, iar expresia b[i].length are ca valoare lungimea liniei de indice i a aceleeasi matrici. S considerm acum instruciunea: String ts[]=new String[7]; Prin aceast instruciune se creeaz n memorie un tablou cu 7 componente, care sunt referine la obiecte din clasa String. Tabloul de referine ocup n memorie o zon compact, n schimb obiectele coninute pot fi amplasate oriunde n memorie. n fine, n cazul instruciunii Object to[]=new Object[7]; se creeaz un tablou de referine la obiecte din clasa

Object. Cum ns aceasta este rdcina ierarhiei tuturor claselor Java, iar o referin la instanele unei clase poate fi folosit i ca referin la instanele subclaselor acesteia, nseamna c n tabloul to[] se pot pune orice fel de obiecte.

S-ar putea să vă placă și