Sei sulla pagina 1di 4

Assegnazioni, operatori ed espressioni

Nelle tabelle seguenti sono riassunti i principali operatori di Java.

Operatori aritmetici
simbolo nome + addizione sottrazione negazione * moltiplicazione / divisione % modulo o resto applicato applicato applicato applicato applicato applicato intera a a a a a a funzione due operandi restituisce la loro somma due operandi restituisce la loro differenza un solo operando ne cambia il segno due operandi restituisce il loro prodotto due operandi restituisce il loro quoziente due operandi restituisce il resto della divisione

Operatori aritmetici abbreviati


simbolo += -= *= /= ++ nome addizione sottrazione moltiplicazione divisione incremento funzione x += y equivale a x = x+y x -= y equivale a x = x-y x *= y equivale a x = x*y x /= y equivale a x = x/y x++ equivale a x = x+1 la variabile viene incrementata dopo il suo utilizzo ++x equivale a x = x+1 la variabile viene incrementata prima del suo utilizzo x-- equivale a x = x-1 la variabile viene decrementata dopo il suo utilizzo --x equivale a x = x-1 la variabile viene decrementata prima del suo utilizzo

--

decremento

Operatori relazionali
simbolo < <= > >= == != significato minore di minore o uguale a maggiore di maggiore o uguale a uguale a diverso da

Operatori booleani
simbolo nome funzione && AND Applicato a due operandi restituisce true solo se i due operandi hanno entrambi valore true; in ogni altro caso restituisce false. || OR Applicato a due operandi restituisce false solo se i due operandi hanno entrambi valore false; in ogni altro caso restituisce true. ! NOT Applicato ad un operando restituisce false solo loperando ha valore true; true se loperando ha valore false.

Autore: Cinzia Bocchi Ultimo aggiornamento: 05/08/11

Espressioni e assegnazioni
Utilizzando gli operatori visti, possiamo comporre espressioni da assegnare alle variabili. Lassegnazione deve essere realizzata con cautela, verificando che il tipo del valore restituito dal calcolo dellespressione sia compatibile con il tipo della variabile. Chiarisco che cosa significa compatibile, utilizzando un esempio. Consideriamo lassegnazione ics = a; Supponiamo che ics sia una variabile di tipo char. Si possono verificare due situazioni: - a di tipo char; in questo caso i due tipi sono compatibili, anzi coincidono. - a non di tipo char; lassegnazione non consentita. Supponiamo ora che ics sia di tipo int. In questo caso: - se a di tipo int, i due tipi coincidono e lassegnazione realizzabile. - se a di tipo double, i due tipi sono compatibili ma lassegnazione deve essere forzata dal programmatore (vedere espressioni aritmetiche). - se a di qualunque tipo non numerico, lassegnazione non consentita perch i tipi sono incompatibili.

Espressioni aritmetiche: promozione e casting


Unespressione aritmetica restituisce sempre un valore numerico, dello stesso tipo degli operandi. Ma se gli operandi sono di tipo diverso? In tal caso viene eseguita una promozione automatica: Durante la valutazione di una espressione aritmetica, il risultato viene convertito nel tipo pi grande tra i tipi degli operandi. Il termine pi grande riferito al range di valori rappresentabili per un certo tipo. In questottica, possiamo stabilire il seguente ordinamento tra tipi numerici: byte < short <int < long < float < double Esempio Consideriamo il seguente frammento di codice:

short sh1 = 10; short sh2; sh2 = sh1+100;


Il risultato della valutazione dellespressione 110, ma il tipo int poich la costante 100 viene considerata di tipo int. Lassegnazione non pu essere eseguita, a meno che il programmatore non lo chieda esplicitamente (vedremo dopo come). Immaginate di voler far entrare un foglio formato A3 (sh1+100) in una cartellina formato A4 (sh2): impossibile. Per farlo, dobbiamo tagliare o piegare il foglio per ridurlo al formato A4, chiedendo per prima lautorizzazione: il taglio del foglio potrebbe far perdere informazioni importanti. Con i numeri accade la stessa cosa: adattare un int per farlo entrare in uno short pu causare la perdita di informazioni.

Autore: Cinzia Bocchi Ultimo aggiornamento: 05/08/11

Esempio Consideriamo il seguente frammento di codice:

double x = 100;
La costante 100, di tipo int, viene promossa a double (100.0) e lassegnazione pu essere eseguita senza problemi. Ci possibile poich un int contenuto comodamente in un double e quindi non vi perdita di informazioni. Attenzione! La promozione di un tipo a un tipo pi grande avviene dopo che il calcolo stato eseguito; ci pu portare a risultati non desiderati. Esempio Consideriamo il seguente frammento di codice:

int num = 10; int den = 4; double ris; ris = num/den ;


Lespressione num/den pari a 10/4. Si tratta di una divisione intera, perch gli operandi sono int; pertanto restituisce 2. Lassegnazione ris = num/den trasforma 2 in un double, ossia in 2.0. Se vogliamo ottenere il quoziente esatto, 2.5, occorre trasformare, cio convertire, in double i due operandi num e den prima che lespressione sia valutata. Loperazione di conversione, in Java, prende il nome di cast e si realizza anteponendo allespressione, tra parentesi tonde, il tipo in cui si vuole convertire gli operandi. Il codice per ottenere il quoziente esatto della divisione :

int num = 10; int den = 4; double ris; ris = (double)num/den ;


Attenzione! Nel casting lespressione valutata solo dopo che tutti gli operandi sono stati convertiti nel tipo desiderato. Il casting pu essere eseguito solo tra tipi che sono compatibili.

Espressioni logiche e di confronto


Con gli operatori relazionali e booleani possibile comporre espressioni logiche, che restituiscono quindi solo true o false. Questo significa che, in unassegnazione, la variabile di destinazione deve essere di tipo boolean. Gli operatori relazionali, o di confronto, possono essere applicati a tutti i tipi per i quali previsto un ordinamento interno. Gli operatori booleani possono essere utilizzati, invece, solo con operandi di tipo booleano.

Autore: Cinzia Bocchi Ultimo aggiornamento: 05/08/11

Esempio Consideriamo il seguente frammento di codice:

int x = int y = boolean b = x<y

10; 40; b; ;

Dopo la valutazione dellespressione x<y, b avr valore true, poich 10 minore di 40. Esempio Consideriamo il seguente frammento di codice:

boolean p = true; boolean q = false; boolean b1,b2; b1 = p && q; b2 = p || q;


Dopo la valutazione delle espressioni, b1 vale false, mentre b2 vale true. Esempio Con gli operatori possibile scrivere espressioni complesse:

boolean p = true; boolean b; int a = 3; b = p && (a<(10*3));


Lespressione p && (a<(10*3)) viene valutata in questo modo : 1. si calcola 10*3, che pari a 30 di tipo int; 2. si calcola (a<30) che restituisce true; 3. si calcola p && true, che restituisce true. Pertanto, b vale true.

_______________________________________________________________________
Quest'opera stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

Autore: Cinzia Bocchi Ultimo aggiornamento: 05/08/11