Sunteți pe pagina 1din 9

Operatorii n Java

Un operator utilizeaz unul sau mai multe argumente numite operanzi pentru a obine o nou valoare. Pe lang faptul c poate produce o nou valoare, un operator poate schimba i valoarea unui operand. Operatorii din Java sunt asemntori cu cei din limbajul C. Ei se pot clasifica astfel: - operatorul de atribuire ( = ) - operatori aritmetici -> operatori binari

adunare ( + ) scdere ( - ) nmulire ( * ) mprire ( / ) restul mpririi, modulo ( % )

-> operatori unari

decrementare ( -- ) incrementare ( ++ ) semnul minus ( - ) semnul plus ( + )

- operatori relaionali

egal ( == ) diferit ( != ) mai mare ( > ) mai mare sau egal ( >= ) mai mic ( < ) mai mic sau egal ( <= )

- operatori logici -> condiionali

i - AND ( && ) sau - OR ( || )

-> booleeni

negare - NOT ( ! ) AND ( & )

OR ( | ) XOR ( ^ )

- operatori la nivel de bit

i ( & ) sau ( | ) sau exclusiv ( ^ ) complementare ( ~ ) deplasare stnga cu semn ( << ) deplasare dreapta cu semn ( >> ) deplasare dreapta fr semn ( >>> )

- operatori de atribuire combinai

aritmetici: +=, -=, *=, /=, %= la nivel de bit: &=, |=, ^=, <<=, >>=, >>>=

- operatorul condiional ( ?: ) - operatorul adunare ir de caractere - operatorul cast - operatorul instanceof

1) Operatorul de atribuire ( = )

Operatorul de atribuire este cel mai utilizat operator i prin intermediul lui se atribuie valoarea operandului din dreapta, operandului din stnga. Operandul din stnga trebuie s fie o variabil n timp ce operandul din dreapta poate fi i o expresie, dar a crui rezultat este o dat de acelai tip ca i tipul variabilei din stnga (n afar de cazul n care se folosete operatorul cast). Forma general a acestei operaii este:

variabil = variabil; variabil = expresie;

Exemplu: int a,b,c,d,e; a=10; b=a; //deci a va primi valoarea 10 //b va primi valoarea varibilei a, adic 10

c=d=12; //acelai lucru cu d=12; c=d; e=f( ); //e primete valoarea returnat de funcia f, i va da eroare dac f nu returneaz valoare int

2) Operatori aritmetici

Operatorii aritmetici sunt de dou tipuri: binari i unari. Cei binari accept doi operanzi, pe cnd cei unari accept un singur operand. Ca i operanzi putem avea date de tipul ntreg (byte, short, int, long, char) sau date de tipul virgul mobil (float, double), dar nu putem executa operai aritmetice cu operanzi de tipul boolean sau referin. n cazul operaiilor aritmetice unare de tipul incrementare/decrementare tipul returnat este acelai cu tipul operandului. n cazul operaiilor unare - i +, i n cazul n care operandul este de tip byte, short sau char, el este convertit automat la int, deci i rezultatul este int. Operatorii de incrementare i decrementare pot fi asezai nainte sau dup operand. Dac sunt nainte, atunci se face operaia i de abia dup aceea se va returna valoarea obinut, iar dac sunt dup se returneaz valoarea operandului apoi se face operaia. n cazul operaiilor binare avem urmtoarele reguli:

dac operanzii sunt de acelai tip (int, long, float, double) expersia ce implic operaia aritmetic va fi evaluat la acelai tip; dac operanzii nu sunt de acelai tip, rezultatul va fi de tipul cel mai cuprinztor (int);

dac unul dintre operanzi este de tipul char, short, byte el este convertit la tipul int nainte de operaie, i mai departe se respect regula de mai sus. Exemplu: int a,b; byte c=3,d=4,e; a=10; //deci a va primi valoarea 10

b=a+30; //b va primi valoarea varibilei a+30, adic 40 a++; //a devine 11

// e=c-d; //EROARE! deoarece c-d este convertit n tipul int i se ncearc atribuirea unui ntreg, unui byte

3) Operatori relaionali

Operatorii relaionali compar doi operanzi pentru a determina relaia dintre ei. Relaia determinat poate fi de egalitate (egal, diferit) sau de comparaie cantitativ (mai mare, mai mic, mai mare sau egal, mai mic sau egal). Rezultatul ei este de tipul boolean (true sau false). Operatorii de testare a egalitii (== i !=) testeaz dac cei doi operanzi sunt egali sau nu. Aceti operatori se pot aplica oricrui tip de date fie el primitiv sau referin cu condiia ca cei doi operanzi s fie compatibili. n cazul n care operanzii sunt de tip primitiv se compar valorile operanzilor, iar dac sunt de tip referin ca ei s fie egali trebuie ca datele ce le conin s fie aceleai i s refenieze aceeai adres. Operatorii de comparaie mai mic/mai mare pot fi utilizai doar pentru tipuri de date primitive i numerice (far tipul boolean). Asemenea ca n cazul operatorilor arimetici, la aplicarea operatorilor relaionali asupra variabilelor de tipbyte, short, char, acestea sunt promovate la tipul int nainte de a se face operaia (aciune numit operator promotion). Exemplu:

int a=2,b=4; if (a==b) System.out.println("a este egal cu b"); nimic deoarece a este diferit de b if (a<=b) System.out.println("a este mai mic sau egal cu b"); textul deoarece a este mai mic ca b //nu se va afia //se va afia

4) Operatori logici

Operatorii logici se pot aplica numai operanzilor de tip boolean. Operanzii pot fi i expresii al cror rezultat este de tip boolean. De cele mai multe ori aceti operatori se folosesc mpreun cu operatorii relaionali pentru a exprima o condiie. Operatorul NOT (!) este un operator unar ce neag operandul ( false -> true; true -> false). Operatorii OR (| sau ||) produc un "sau" ntre cei doi operanzi

false + false -> false false + true -> true true + false -> true true + true -> true Operatorii AND (& sau &&) produc un "i" ntre cei doi operanzi

false + false -> false false + true -> false true + false -> false true + true -> true

Operatorul XOR, sau exclusiv (^) returneaz true dac opeanzii nu au aceeai valoare i invers

false + false -> false false + true -> true true + false -> true

true + true -> false

Operatorii && i || sunt operatori logici condiionali, iar & i | sunt operatori logici booleani. Deosebirea dintre ei const n faptul c primul tip nu necesit evaluarea celui de-al doilea operand dac primul operand determin valoarea final a expresiei, n timp ce operanzii booleani fac evaluarea tuturor operanzilor. Exemplu: int a=2,b=4; if (a==b) && (a>4) System.out.println("Bau!"); nimic deoarece a este diferit de b i a este mai mic ca 4 if (a<=b) System.out.println("a este mai mic sau egal cu b"); textul deoarece a este mai mic ca b //nu se va afia //se va afia

5) Operatori la nivel de bit

Aceti operatori ofer posibilitatea operaiilor la nivel de bit. Operanzii pot fi numai din categoria celor de tip primitiv ntregi (byte, short, char, int, long). Aceste operaii sunt specifice limbajelor de asamblare. Sunt disponibile cele patru operaii la nivel de bit uzuale i operaiile de deplasare la stnga sau la dreapta:

complementare bit cu bit - NOT ( ~ ) sau - OR ( | ) i - AND ( & ) sau exclusiv - XOR ( ^ ) shift la stnga cu pstrarea semnului ( << ) shift la dreapta cu pstrarea semnului ( >> ) shift la dreapta fr pstrarea semnului ( >>> )

6) Operatori de atribuire combinai

Operatorul de atribuire ( = ) poate fi combinat cu operatori de tip aritmetic i operatori la nivel de bit, obinndu-se astfel prescurtri de scriere a codului. a=a+b; < = > a+=b; a=a-b; < = > a-=b; a>>=b; a=a*b; < = > a*=b; a>>>=b; a=a/b; < = > a/=b; a=a%b; < = > a%=b; Exemplu: int a=2,b=4; a+=b; //acelai lucru cu a=a+b; deci a devine 6 a=a&b; < = > a&=b; a=a|b; < = > a|=b; a=a^b; < = > a^=b; a=a<< = > a<<<=b; a=a>>b; < = > a=a>>b; < = >

7) Operatorul condiional (? :)

Este un operator ternar care pe baza valorii booleane a unei expresii alege una dintre cele dou valori. Forma general este: boolean_exp ? value0 : value1. Dac boolean_exp are valoarea true atuncivalue0 este valoarea returnat de operaie. Invers, dac boolean_exp este false, value1 este cea returnat. Exemplu: int a; boolean cond=true;

a=cond ? 5 : 6; cond=false; a=cond ? 5 : 6;

//a va primi valoarea 5

//a va primi valoarea 6

8) Operatorul de adunare ir de caractere

Java nu permite ca operanzii s fie clase, dar exist un caz special de clas care poate utiliza operatorul de adunare. Aceast clas este String din pachetul java.lang. Forma general este: ir_caractere+variabil sau variabil+ir_caractere, variabila putnd fi de orice tip. n urma acestei operaii se obine un nou ir de caractere (String). Dac variabila este un obiect se utilizeaz metoda toString() a clasei Object pentru a forma irul final.

9) Operatorul cast

Acest operator este utilizat pentru a converti o valoare dintr-un tip n altul. Se poate converti o valoare dintr-un tip de date numeric ntr-un alt tip de date numeric, dar i un tip referin n alt tip referin (nu n orice condiie). Forma general este:
(tipDorit)operandDeAltTip

Dac se dorete conversia unui tip de date ntr-un alt tip de date de precizie mai mare (din int n short, dinfloat n int) utilizarea operatorului cast nu este obligatorie, conversia fcndu-se implicit. Dac ns se dorete conversia unui tip ntr-un tip mai puin precis (din short n float) utilizarea operatorului este obligatorie, altfel apar erori la compilare.

10) Operatorul instanceof

Operatorul este utilizat pentru a testa dac un obiect este de o anumit clas sau nu. Forma general este:
object instanceof className

Returneaz true dac obiectul object este de clas className sau de o clas derivat din aceasta ifalse dac nu. Exemplu: Random rand = new Random ( ); boolean cond; cond = rand instanceof Random; //cond va primi valoarea true