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șteequals. "Suma: " + a + blipeș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 -Xlintavertizează 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.