operatoriAritmetici

operazioni con i numeri

Un operatore è un simbolo (formato da uno o più caratteri) che serve a produrre un risultato combinando il valore di uno o più operandi.

Operatori aritmetici

Questo tipo di operatori serve a combinare valori numerici, niente di più complicato delle classiche operazioni matematiche.

+
è il solito operatore per l'addizione: 4 + 7 è una espressione ammissibile, anche k + 7 se k è una variabile di tipo numerico
-
con due operandi è la sottrazione, usato nel modo usuale
con un solo operando posto dopo l'operatore è l'inversione di segno
*
moltiplicazione, k * m è una espressione valida se k e m sono due variabili numeriche
/
quoziente, il risultato della divisione. Se si usano variabili in virgola mobile è il risultato che ci si aspetta: 15.0 / 4.0 dà come risultato 3.75. Se si usano valori interi il risultato è quello delle divisioni che si facevano alle elementari! (quelle con il resto) quindi: 10 / 3 fa 3.
%
resto della divisione, anche chiamato modulo. 10 % 3 fa 1

Il risultato di una operazione (l'applicazione di un operatore) è del tipo più preciso tra quelli coinvolti. Se per esempio sommo due int ottengo un int, se sommo un int e un double ottengo un double.

Quanto vale la seguente espressione?

10 / 6
1giusto 1.66667no, i valori sono interi e il risultato sarà intero 2no, 10 diviso 6 fa 1 (con resto 4 ma questo non importa)

Quanto vale m alla fine del seguente frammento di programma?

int x = 3
double y = 2.0;
double m;
m = x / y;
1no, y è double e quindi il risultato è double 1.0no, viene calcolata la divisione compresa la parte decimale 1.5giusto

operatori di pre/post incremento

++
se posto prima di una variabile incrementa di uno il suo valore e poi la usa per eseguire il calcolo dell'espressione, se posto dopo i nome della variabile prima usa il valore della variabile stessa per calcolare il resto dell'espressione e poi ne incrementa il valore
--
se posto prima di una variabile decrementa di uno il suo valore e poi la usa per eseguire il calcolo dell'espressione, se posto dopo i nome della variabile prima usa il valore della variabile stessa per calcolare il resto dell'espressione e poi ne decrementa il valore
Gli operatori di pre (o post) incremento possono comparire sia all'interno di espressioni che come istruzioni a se.

Quanto vale x dopo il seguente frammento di programma?

x = 18
x++;
18no, c'era un incremento 19

Quanto vale y dopo il seguente frammento di programma?

x = 3
y = x++ * 2;
6esatto, prima calcola l'espressione e poi fa l'incremento 8no, l'incremento viene fatto dopo il calcolo

Quanto valgono x e y dopo il seguente frammento di programma?

x = 3
y = --x * 3;
x=2 e y=6giusto x=3 e y=6no, x viene decrementata x=2 e y=9no, prima viene fatto il decremento della x e poi calcolata l'espressione x=3 e y=9no, va decrementata la x e poi calcolata l'espressione

Espressioni

Viene detta espressione una combinazione di valori, operatori e funzioni da cui si ottiene un nuovo valore. Il tipo dell'espressione è il tipo del risultato ottenuto.

Sembra complicato? forse risulterà più semplice facendo alcuni esempi, teniamo conto soltanto delle seguenti dichiarazioni:

int x = 5;
int y = 7;
double m = 2.00;
String s = "11";

E proviamo a vedere alcune espressioni e il loro tipo:

x + y
Questa espressione combina due informazioni (variabili) di tipo int e quindi è una espressione di tipo int, il suo valore è 12
x * 3
Questa espressione combina due informazioni (una variabile e una costante) di tipo int e quindi è una espressione di tipo int, il suo valore è 15
4
Anche questa è una espressione, ha una sola costante di tipo int e quindi è un espressione di tipo int, il suo valore è 4
Integer.parseInt(s)
Integer.parseInt() è una funzione che da un risultato di tipo int: di nuovo una espressione int, il suo valore è 11
Integer.parseInt(s) + 18
Integer.parseInt() è una funzione che da un risultato di tipo int, sommato ad un altro int... di nuovo una espressione intera, 29 per la precisione.
y * m
siccome le due variabili sono di tipi diversi il risultato è del tipo più "ampio", cioè che consente di rappresentare il numero più grande: double, il suo valore è 14.00
(int)(m*1.3)
m e 1.3 sono double quindi il risultato è double ma c'è un cast: il tipo dell'espressione è int (ma il prodotto viene fatto tra due double quindi è double che poi verrà convertito in int) e il suo valore è 2
y + x++
tutte variabili int, il suo tipo è int, il valore è 12, questa espressione cambia anche il valore di x che diventerà 6

Precedenza degli operatori

Nelle espressioni del linguaggio linguaggio Java gli operatori hanno la precedenza usuale ma per un riferimento più preciso è disponibile una pagina del tutorial di Oracle.

Nella scrittura delle espressioni per modificare l'ordine in cui vanno eseguite le operazioni possono essere utilizzate soltanto le parentesi tonde.

Quanto vale 6 + 4 / 2 ?

8esatto 5no, viene fatta prima la divisione

Quanto vale l'espressione 4+5*2?

18no, prima si fa il prodotto erroreno, l'espressione è corretta 14

Quale è il tipo dell'espressine 4+5*2?

doubleno, non sono numeri con una parte decimale int erroreno, l'espressione è corretta e ha un tipo

Quanto vale [6 + (2 * 2) ] / 2 ?

5no, le parentesi quadre non posso essere usate 4no, le parentesi quadre non posso essere usate erroregiusto, le parentesi quadre non posso essere usate