Din punct de vedere matematic, aceste date pot fi numere întregi sau reale. Existența mai multor tipuri în cadrul fiecăreia din aceste două categorii se datorește particularităților de reprezentare a datelor în memorie.
Tipurile de date numerice în Java sunt următoarele:
În limbajul Java, conversia de tip implicită se face atunci
când prin conversie nu se pierde informație. De exemplu, dacă în
expresia a=b variabila a este de tip int, iar b
este de tip short sau byte, valoarea variabilei b
va fi automat convertită la tipul int înainte de atribuire.
În tabela de mai jos sunt indicate cu X
toate conversiile de tip care se pot realiza inplicit. În coloana din
stânga este tipul datei care este supusa conversiei, iar în capul
tabelei (pe prima linie) tipul către care se face conversia.
De exemplu, tipul int se poate converti implicit în oricare din tipurile long, float sau double, dar nu și în tipurile byte sau short. |
Conversia de tip explicită se face prin operatorul unar numit cast, care are forma (tip), adică este format din numele tipului către care se face conversia, cuprins între paranteze. Acesta este un operator fără efect lateral, deci care nu modifică valoarea operandului. De exemplu, expresia (byte)a se va folosi pentru a converti valoarea operandului a la tipul byte. Aceasta înseamnă că valoarea variabilei a rămâne neschimbată, însă valoarea expresiei (byte)a se obține din cea a lui a prin convertirea ei la tipul byte.
Utilizarea operatorului cast se justifică
atunci când, în situația respectivă, conversia implicită nu este
posibilă. Nu este însă greșit dacă folosim acest operator chiar și când
conversia respectivă se poate face și implicit.
Utilizarea operatorului cast arată faptul că programatorul dorește să se faca o anumită conversie, chiar dacă prin aceasta se poate pierde informație. Asupra efectelor pe care care le are conversia explicită vom reveni la prezentarea diferitelor tipuri de date numerice. |
Tipul rezultatului operațiilor aritmetice depinde de tipul operanzilor și va fi discutat la fiecare din tipurile numerice în parte.
În exemplele de expresii din această secțiune, vom considera că a și b sunt doi operanzi numerici.
În limbajul Java există următorii operatori aritmetici:
Operatori unari fără efect lateral:
Operator | Exemplu de expresie | Valoarea expresiei |
|
|
aceeași cu valoarea operandului |
|
|
valoarea operandului cu semn schimbat |
Operatori unari cu efect lateral
Operatorii de incrementare ++ și
decrementare -- au ca operanzi variabile numerice.
Operatorul de incrementare ++ are ca efect lateral
creșterea cu o unitate a valorii variabilei-operand, iar operatorul de
decrementare -- are ca efect lateral micșorarea cu o
unitate a acestei valori. Acest efect are loc indiferent dacă operatorul
este plasat înaintea operandului sau după acesta. În schimb, poziția
operatorului față de operand are importanță la stabilirea valorii
expresiei rspective. Daca operatorul este plasat în fata operandului,
operația de incrementare sau decremantare are loc înainte de a se
stabili valoarea expresiei; dacă, însă, operatorul este plasat dupa
operand, valoarea expresiei se stabilește înainte de a se face
incrementarea sau decrementarea. Efectul operațiilor este prezentat în
tabelul de mai jos.
Operator | Expresie | Operatie | Valoarea expresiei | Efect lateral |
|
|
preincrementare |
|
valoarea variabilei a creste cu 1 |
|
|
postincrementare |
|
valoarea variabilei a creste cu 1 |
|
|
predecrementare |
|
valoarea variabilei a scade cu 1 |
|
|
postdecrementare |
|
valoarea variabilei a scade cu 1 |
Operatori binari
Operatorii binari nu au efect lateral - deci
nu modifică valorile operanzilor - și sunt dați în tabela de mai jos.
Operator | Expresie | Operatie | Valoarea expresiei |
|
|
adunare | suma valorilor operanzilor |
|
|
scadere | diferenta valorilor operanzilor |
|
|
inmultire | produsul valorilor operanzilor |
|
|
impartire | catul (rezultatul impartirii) primului operand la al doilea |
|
|
modulo | restul impartirii intregi a primului operand la al doilea |
Prin împărțire întreagă înțelegem împărțirea făcută astfel, încât câtul sa fie un număr întreg (fără extragerea părții fracționare (situate dupa virgulă).
Operatorii de atribuire compusă sunt
următorii: +=, -=, *=, /=, %=, &=, |=, ^=, <<=,
>>=, >>>=.
Se observă că fiecare din acești operatori are
forma op= în care op este un operator aritmetic binar. Expresia
variabila op= operand
în care op este un operator aritmetic
binar, este echivalentă cu expresia
variabila = variabila op operand
și se evaluează astfel:
- se calculează mai întâi valoarea expresiei (variabila
op operand)în care variabila intră cu valoarea sa
anterioară;
- valoarea astfel calculată se atribuie
ca noua valoare a variabilei din partea stânga. Aceasta nouaă
valoare este, totodată, și valoare a expresiei.
Constatăm astfel că operatorii de atribuire
compusă au efect lateral, la fel cu cei de atribuire.
Exemplu Fie x=3.72 si y=0.19 două variabile de tip double. Expresia x+=y se calculeaza, la fel ca expresia x=x+y, în modul următor: - se calculează valoarea expresiei x+y, care este 3.91; - se atribuie variabilei x valoarea 3.91 (efectul lateral); - valoarea astfel atribuită (3.91) este considerată și drept valoare a expresiei x+=y. |
Operator | Semnificatie |
|
mai mic decât |
|
mai mic decât sau egal cu |
|
mai mare decât |
|
mai mare decât sau egal cu |
|
este egal cu |
|
este diferit de |
Operatorii relaționali se aplică tuturor tipurilor de date numerice, inclusiv celor de tip char. Se permite ca cei doi operanzi sa fie de tipuri diferite, de exemplu să se compare o valoare de tip byte cu una de tip double sau cu una de tip char.
Să consideram, de exemplu, expresia a<b, unde a și b sunt operanzi de tipuri întregi. Dacă valoarea operandului a este mai mică decât cea a operandului b, atunci valoarea acestei expresii este true (adevărat). Dacă însă valoarea lui a nu este mai mică decât cea a lui b, ca rezultat se obține valoarea false (fals). Menționăm că valorile logice true și false sunt cele două valori ale tipului de date boolean