Logo Încarcă | Propune
Conecteaza-te arrow

Java #4 - operatori (relaţionali, logici, aritmetici, condiţionali)

Operatorii în Java

 

          Un operator utilizează unul sau mai multe argumente numite operanzi pentru a obţine o nouă valoare. Pe langă faptul că poate produce o nouă valoare, un operator poate schimba şi valoarea unui operand.

           Operatorii din Java sunt asemănători cu cei din limbajul C. Ei se pot clasifica astfel:

- operatorul de atribuire ( = )

- operatori aritmetici

   -> operatori binari

  • adunare ( + )
  • scădere ( - )
  • înmulţire ( * )
  • împărţire ( / )
  • restul împărţirii, modulo ( % )

   -> operatori unari

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

- operatori relaţionali

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

- operatori logici

   -> condiţionali

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

   -> booleeni

  • negare - NOT ( ! )
  • AND ( & )
  • OR ( | )
  • XOR ( ^ )

- operatori la nivel de bit

  • şi ( & )
  • sau ( | )
  • sau exclusiv ( ^ )
  • complementare ( ~ )
  • deplasare stânga cu semn ( << )
  • deplasare dreapta cu semn ( >> )
  • deplasare dreapta fără semn ( >>> )

- operatori de atribuire combinaţi

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

- operatorul condiţional ( ?: )

- 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 stânga. Operandul din stânga trebuie să fie o variabilă în timp ce operandul din dreapta poate fi şi o expresie, dar a cărui rezultat este o dată de acelaşi tip ca şi tipul variabilei din stânga (în afară de cazul în care se foloseşte operatorul cast).

           Forma generală a acestei operaţii este:

  • variabilă = variabilă;
  • variabilă = expresie;

          Exemplu:

          int a,b,c,d,e;

          a=10;         //deci a va primi valoarea 10

          b=a;           //b va primi valoarea varibilei a, adică 10

          c=d=12;    //acelaşi lucru cu  d=12; c=d;

          e=f( );       //e primeşte valoarea returnată de funcţia 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 când 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 operaţi aritmetice cu operanzi de tipul boolean sau referinţă.

           în cazul operaţiilor aritmetice unare de tipul incrementare/decrementare tipul returnat este acelaşi cu tipul operandului. în cazul operaţiilor 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 asezaţi înainte sau după operand. Dacă sunt înainte, atunci se face operaţia şi de abia după aceea se va returna valoarea obţinută, iar dacă sunt după se returnează valoarea operandului apoi se face operaţia.

           în cazul operaţiilor binare avem următoarele reguli:

  • dacă operanzii sunt de acelaşi tip (int, long, float, double) expersia ce implică operaţia aritmetică va fi evaluată la acelaşi tip;
  • dacă operanzii nu sunt de acelaşi tip, rezultatul va fi de tipul cel mai cuprinzător (int);
  • dacă unul dintre operanzi este de tipul char, short, byte el este convertit la tipul int înainte de operaţie, ş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 relaţionali

 

          Operatorii relaţionali compară doi operanzi pentru a determina relaţia dintre ei. Relaţia determinată poate fi de egalitate (egal, diferit) sau de comparaţie 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 egalităţii (== şi !=) testează dacă cei doi operanzi sunt egali sau nu. Aceşti operatori se pot aplica oricărui tip de date fie el primitiv sau referinţă cu condiţia 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 conţin să fie aceleaşi şi să refenţieze aceeaşi adresă.

          Operatorii de comparaţie mai mic/mai mare pot fi utilizaţi doar pentru tipuri de date primitive şi numerice (fară tipul boolean).

           Asemenea ca în cazul operatorilor arimetici, la aplicarea operatorilor relaţionali asupra variabilelor de tip byte, short, char, acestea sunt promovate la tipul int înainte de a se face operaţia (acţiune numită operator promotion).

           Exemplu:

           int a=2,b=4; 

           if (a==b) System.out.println("a este egal cu b");                         //nu se va afişa nimic deoarece a este diferit de b             

           if (a<=b) System.out.println("a este mai mic sau egal cu b");      //se va afişa textul deoarece a este mai mic ca b

 

 

4)  Operatori logici

 

         Operatorii logici se pot aplica numai operanzilor de tip boolean. Operanzii pot fi şi expresii al căror rezultat este de tip boolean. De cele mai multe ori aceşti operatori se folosesc împreună cu operatorii relaţionali pentru a exprima o condiţie.

           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 aceeaşi valoare şi invers 

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

           Operatorii && şi || sunt operatori logici condiţionali, 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!");                         //nu se va afişa 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");      //se va afişa textul deoarece a este mai mic ca b

 

 

5)  Operatori la nivel de bit

 

           Aceşti operatori oferă posibilitatea operaţiilor la nivel de bit. Operanzii pot fi numai din categoria celor de tip primitiv întregi (byte, short, char, int, long). Aceste operaţii sunt specifice limbajelor de asamblare. Sunt disponibile cele patru operaţii la nivel de bit uzuale şi operaţiile de deplasare la stânga sau la dreapta:

  • complementare bit cu bit - NOT ( ~ )
  • sau - OR ( | )
  • şi - AND ( & )
  • sau exclusiv - XOR ( ^ ) 
  • shift la stânga cu păstrarea semnului ( << )
  • shift la dreapta cu păstrarea semnului ( >> )
  • shift la dreapta fără păstrarea semnului ( >>> ) 
 

 

6)  Operatori de atribuire combinaţi

 

           Operatorul de atribuire ( = ) poate fi combinat cu operatori de tip aritmetic şi operatori la nivel de bit, obţinându-se astfel prescurtări de scriere a codului.

           a=a+b;  < = >  a+=b;           a=a&b;  < = >  a&=b;         a=a<< = >  a<<<=b;

           a=a-b;  < = >  a-=b;            a=a|b;  < = >  a|=b;              a=a>>b;  < = >  a>>=b;

           a=a*b;  < = >  a*=b;           a=a^b;  < = >  a^=b;            a=a>>b;  < = >  a>>>=b;

           a=a/b;  < = >  a/=b;

           a=a%b;  < = >  a%=b;

           Exemplu:

           int a=2,b=4; 

           a+=b;                        //acelaşi lucru cu a=a+b; deci a devine 6            

 

 

7)  Operatorul condiţional (? :)

 

           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 atunci value0 este valoarea returnată de operaţie. Invers, dacă boolean_exp este false, value1 este cea returnată.

          Exemplu:

          int a;

          boolean cond=true;         

          a=cond ? 5 : 6;           //a va primi valoarea 5

          cond=false;

          a=cond ? 5 : 6;           //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 putând fi de orice tip. în urma acestei operaţii se obţine 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 condiţie).

          Forma generală este:  (tipDorit)operandDeAltTip

       Dacă se doreşte conversia unui tip de date într-un alt tip de date de precizie mai mare (din int în short, din float în int) utilizarea operatorului cast nu este obligatorie, conversia făcându-se implicit. Dacă însă se doreşte conversia unui tip într-un tip mai puţin 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 şi false dacă nu.

          Exemplu:

          Random rand = new Random ( );

          boolean cond;         

          cond = rand instanceof Random;          //cond va primi valoarea true

 

Cuvinte cheie: Java operands, operanzi in Java, objects casting in Java, schimbarea tipului de obiect in Java, Java tutorials, tutoriale Java, Java language program, limbaj de programare Java, Java operators, binary operators, ternary operators, arithmetical operators, conditional operators, operatori Java


Detalii:
De acelasi autor:
Autor: Valy - Trimite mesaj autorului
Categoria: Java




Comentarii:
Nume/Prenume
Email
Mesaj
in legatura cu operatorii aritmetici, nu inteleg de cevariabila de tip byte "e"devine sau incearca sa devina int? e=c-d; din moment ce "e" a fost declarata la inceput ca variabila byte

Postat de Banu Stefan la 2013-02-17 11:06:56
© Biblioteca de tutoriale Limbă - Aplicaţii - Realizatori- Tutoriale - Contact - Privacy Policy