Operatori în Java

Operatorii aritmetici, de comparație, logici, de atribuire, ternar și pe biți din Java, cu ordinea lor de evaluare.

Sintaxă
+  -  *  /  %          // aritmetici
==  !=  <  >  <=  >=   // comparație
&&  ||  !              // logici
=  +=  -=  *=  /=      // atribuire
++  --                 // incrementare
cond ? a : b           // ternar
&  |  ^  ~  <<  >>  >>> // pe biți

Ce face Operatori

Operatorii aritmetici sunt +, -, *, / și % (restul). + concatenează și texte: dacă unul dintre operanzi este String, rezultatul este String. Operatorii de comparație (==, !=, <, >, <=, >=) dau un boolean, iar cei logici (&&, ||, !) combină valori boolean.

++ și -- cresc sau scad cu 1. Forma prefix (++i) modifică variabila și apoi îi dă valoarea; forma postfix (i++) dă valoarea veche și apoi modifică. Operatorii compuși (+=, *=…) scurtează x = x + 5. Ternarul conditie ? a : b alege una dintre două valori.

Operatorii pe biți (&, |, ^, ~, <<, >>, >>>) lucrează cu biții întregilor. Ordinea de evaluare urmează regulile din matematică (* înaintea lui +); când nu ești sigur, pune paranteze.

== pe obiecte compară referințele (dacă este același obiect), nu conținutul. Textele și celelalte obiecte se compară cu equals.

Exemple

Exemplul 1: Aritmetică, concatenare și ordinea operațiilor

Concatenarea se face de la stânga la dreapta: în "Total: " + 2 + 3 textul apare primul, deci 2 și 3 sunt lipite ca text. Parantezele forțează adunarea.

public class Main {
    public static void main(String[] args) {
        System.out.println(2 + 3 * 4);
        System.out.println((2 + 3) * 4);
        System.out.println(17 / 5 + " rest " + 17 % 5);
        System.out.println("Total: " + 2 + 3);
        System.out.println("Total: " + (2 + 3));
        System.out.println(2 + 3 + " lei");
    }
}

Rezultat

14
20
3 rest 2
Total: 23
Total: 5
5 lei

Exemplul 2: Incrementare, atribuire compusă și ternar

i++ folosește valoarea veche, ++i pe cea nouă. Ternarul alege textul în funcție de notă.

public class Main {
    public static void main(String[] args) {
        int i = 5;
        int a = i++; // a = 5, apoi i = 6
        int b = ++i; // i = 7, apoi b = 7
        System.out.println("a=" + a + " b=" + b + " i=" + i);

        int sold = 100;
        sold += 50;
        sold -= 30;
        sold *= 2;
        System.out.println("sold: " + sold + " lei");

        int nota = 4;
        String rezultat = nota >= 5 ? "promovat" : "restanță";
        System.out.println("nota " + nota + ": " + rezultat);
    }
}

Rezultat

a=5 b=7 i=7
sold: 240 lei
nota 4: restanță

Exemplul 3: Operatori pe biți și == pe obiecte

Permisiunile sunt biți dintr-un int: | adaugă un bit, & verifică un bit. La texte, == compară referințele: textul construit la rulare este alt obiect decât literalul, deși are același conținut.

public class Main {
    static final int CITIRE = 1;  // 001
    static final int SCRIERE = 2; // 010
    static final int EXECUTIE = 4; // 100

    public static void main(String[] args) {
        int drepturi = CITIRE | SCRIERE;
        System.out.println("drepturi = " + drepturi + " (binar " + Integer.toBinaryString(drepturi) + ")");
        System.out.println("poate scrie? " + ((drepturi & SCRIERE) != 0));
        System.out.println("poate executa? " + ((drepturi & EXECUTIE) != 0));
        System.out.println("5 << 2 = " + (5 << 2) + ", -16 >> 2 = " + (-16 >> 2));

        String oras = "Iași";
        String construit = new StringBuilder("Ia").append("și").toString();
        System.out.println("== : " + (oras == construit));
        System.out.println("equals: " + oras.equals(construit));
    }
}

Rezultat

drepturi = 3 (binar 11)
poate scrie? true
poate executa? false
5 << 2 = 20, -16 >> 2 = -4
== : false
equals: true

Greșeli frecvente

  • Compararea textelor cu ==: compară obiectele, nu literele. Folosește equals.
  • "Suma: " + a + b lipește numerele ca text. Pune paranteze: "Suma: " + (a + b).
  • Confuzia dintre = (atribuire) și == (comparație).
  • int x = 10; x += 2.5; compilează (cast ascuns) și taie zecimalele; javac -Xlint avertizează despre conversia cu pierderi.

Comenzi înrudite

  • int, long, short și byte: Tipurile întregi din Java: int (32 de biți) pentru aproape orice, long pentru valori mari, short și byte pentru economie de memorie.
  • boolean: Tipul pentru valori logice: true sau false. Condițiile din if, while și for trebuie să fie boolean.
  • String-uri și text blocks: Textul în Java este de tip String, imutabil; text blocks („”” … „””) permit texte pe mai multe rânduri fără \n și ghilimele escape.
  • if și else: Execută un bloc doar dacă o condiție boolean este adevărată; else și else if tratează celelalte cazuri.
  • equals și hashCode: equals decide când două obiecte sunt „egale” ca valoare; hashCode trebuie rescris împreună cu el, altfel HashMap și HashSet nu funcționează corect.