Gli operatori in Java

Un operatore è un simbolo che ha la funzione di compiere particolari operazioni sui dati.
Una prima classificazione può distinguerli in operatori:

  • unari, ossia operatori che agiscono su un solo operando
  • binari, ossia operatori che agiscono su due operandi
Una ulteriore classificazione li distingue tra operatori:
  • aritmetici, utilizzati per compiere operazioni aritmetiche
  • relazionali, utilizzati per confrontare dei valori
  • logici, utilizzati per costruire espressioni logiche articolate
  • su stringhe, utilizzati per eseguire operazioni sulle stringhe alfanumeriche
  • bitwise (bit a bit), utilizzati per manipolare sequenze di bit
  • di assegnamento, utilizzati per impostare il valore di una variabile
  • composti, utilizzati per eseguire una operazione di assegnamento contestualmente ad una operazione aritmetica
Affrontiamoli un po' più dettagliatamente.

Operatori aritmetici

Operatore Operazione Esempi
+ somma 3+2
a+1
- sottrazione o negazione 3-2
-a
* moltiplicazione 3*2
a*4
/ divisione 3/2
a/4
% modulo (resto della divisione) 3%2
a%4
-- decremento i--  →  i = i - 1
++ incremento i++  →  i = i + 1

Operatori relazionali

Operatore Operazione Esempi
< minore 2<3
a<1
<= minore o uguale 2<=3
a<=1
> maggiore 3>2
a>4
>= maggiore o uguale 3>=2
a>=4
== uguale 3==3
a==4
!= diverso 3!=2
a!=4

Operatori logici

Operatore Operazione Esempi
&& and (prodotto logico) a == 1 && b >= a
|| or (somma logica) a == 1 || b >= a
! not (negazione) !a

Operatori su stringhe

Operatore Operazione Esempi
+ concatenazione a + b
"Ciao da " + nome

Nota:
l'operatore + tra numeri interi esegue la somma degli stessi fino a quando non una stringa; da quel momento in poi esegue la concatenazione
Esempi:
"abc" + "def" restituisce "abcdef"
"3"+"2"+"abcdef" restituisce "32abcdef"
3+2+"abcdef" restituisce "5abcdef"

Per eseguire la concatenazione dall'inizio dell'espressione si può concatenare una stringa vuota ad inizio espressione, come mostrato di seguito:
""+3+2+"abcdef" restituisce "32abcdef"

Operatori bitwise

Operatore Operazione Esempi
& and a & b
| or a | b
~ not ~a
^ xor a ^ b
>> shift a destra con estensione del segno a >> 3
<< shift a sinistra a << 3
>>> shift a destra con riempimento a zero a >>> 3

Operatore di assegnamento

Operatore Operazione Esempi
= assegnamento a = 10
a = b + c

Operatori composti

Operatore Operazione Esempi
+= somma e assegnamento a += 10  →  a = a + 10
a += b  →  a = a + b
-= differenza e assegnamento a -= 10  →  a = a - 10
a -= b  →  a = a - b
*= prodotto e assegnamento a *= 10  →  a = a * 10
a *= b  →  a = a * b
/= divisione e assegnamento a /= 10  →  a = a / 10
a /= b  →  a = a / b
%= modulo e assegnamento a %= 10  →  a = a % 10
a %= b  →  a = a % b
&= and bitwise e assegnamento a &= b  →  a = a & b
|= or bitwise e assegnamento a != b  →  a = a | b
^= xor bitwise e assegnamento a ^= b  →  a = a ^ b
>>= shift a destra e assegnamento a >>= 2  →  a = a >> 2
<<= shift a sinistra e assegnamento a <<= 2  →  a = a << 2
>>>= shift a destra senza segno e assegnamento a >>>= 2  →  a = a >>> 2

Nota:
Gli operatori hanno una priorità che determina l'ordine in cui essi saranno valutati, in assenza di specifica esplicita da parte del programmatore, attraverso l'uso delle parentesi tonde.
In generale gli operatori unari hanno priorità, seguono quelli binari con un ordine di priorità specifico.
Per evitare, ad ogni modo, risultati non attesi, si consiglia l'utilizzo esplicito delle parentesi tonde, per determinare l'ordine di esecuzione delle operazioni più articolate.

Nella tabella che segue sono indicati gli operatori in Java in ordine di priorità decrescente, dall'alto verso il basso.

operatori postfissi espr++
espr--
operatori unari ++espr
--espr
-espr
!espr
operatori moltiplicativi * / %
operatori additivi + -
operatori relazionali < <=> >=
operatori di uguaglianza == !=
AND bitwise &
XOR bitwise ^
OR bitwise |
AND logico &&
OR logico ||
operatori di assegnazione = += -= *= /= %= &= |= ^= <<=>>= >>>=

Nota:
Gli operatori sono valutati in base alla priorità e per uguale priorità da sinistra a destra.
Gli operatori binari sono associativi a sinistra, cioè per esempio a+b+c equivale a (a+b)+c: le assegnazioni sono associative a destra, cioè a=b=c equivale a a=(b=c).