Seleziona una pagina

Java non è un linguaggio di programmazione a oggetti puro, per questo mette a disposizione alcuni tipi di dato primitivi.
Ci sono quattro tipi primitivi per i numeri interi e due per i numeri in virgola mobile.
Elenchiamo quest’ultimi nella seguente tabella.

byte interi tra -128 e 127 (8 bit)
short interi tra -32768 e 32767 (16 bit)
int interi tra -2147483648 e 2147483647 (32 bit)
long interi con 64 bit
float numeri in virgola mobile (32 bit)
double numeri in virgola mobile (64 bit)
char caratteri (standard UNICODE, 16 bit)
boolean due soli valori possibili: true e false
Assegnamento tra variabili numeriche

In un comando di assegnamento, il valore dell’espressione a destra del simbolo di uguale, deve essere di tipo compatibile con il tipo della variabile.
Nel caso dei tipi di dato numerici, un tipo è compatibile con un altro se la conversione del valore non provoca una perdita di informazione: in questo caso la conversione è automatica.

int iVar = 8; OK: Un int può essere convertito in un double senza perdita di informazione.
double dVar = iVar;
double dVar = 8; NO: Un numero in virgola mobile non può essere convertito in un intero senza perdita di informazione (la parte decimale).
int iVar = dVar;

In ogni caso si può comunque forzare la conversione tra i tipi numerici (anche nel caso di perdita di informazione) utilizzando l’operatore di cast.
Il cast si scrive mettendo a sinistra dell’espressione da convertire il nome del tipo desiderato racchiuso tra parentesi:

< variabileDiTipo1 > = ( < tipo1 > ) < espressioneDiTipo2 >;
double dVar = 44.634; OK: Converte il numero decimale in un intero, perdendo la parte decimale, stampa 44.
int iVar = (int) dVar;
System.out.println(iVar);
double dVar = 44.634; OK: Converte il numero in virgola mobile da 64 a 32 bit, anche se perde informazione.
float fVar= (float) dVar;

Prestate attenzione ai tipi:
– Le costanti numeriche intere di sole cifre sono al massimo di tipo int, non long;
– Le costanti numeriche in virgola mobile sono di tipo double, non float.

Perché? Cerchiamo di capire quale tipo di dato il compilatore associa ad una costante numerica guardando con attenzione gli esempi riportati nella seguente tabella.

short a = 256; OK
short b = 3565567; ERRORE: la costante intera è troppo grande per uno short, utilizzare un int.
long x = 44444442556; ERRORE: Alla costante viene assegnato il tipo int, ma il valore è troppo grande.
long y = 44444442556l; OK: Una “l” (L minuscola) alla fine indica che la costante è long.
float f = 3.1;

ERRORE: Possibile perdita di precisione. Richiesto l’uso di double.
float g = 3.1f;

OK: “f” indica che la costante e’ float.
float h = (float) 3.1;

OK: l’operatore di cast converte la costante double in float prima dell’assegnamento.

Per evitare problemi, e’ consigliabile usare solo i tipi numerici int e double.

Operatori aritmetici
++ incremento
decremento
* moltiplicazione
/ divisione
% modulo
+ addizione
sottrazione

Tutti gli operatori, se applicati a interi, restituiscono un valore int o long, mai byte o short.

Gli operatori aritmetici hanno il loro significato usuale. Fa eccezione l’operatore di divisione, che può avere due diversi significati:

– divisione intera, se entrambi gli argomenti sono interi: in questo caso il risultato è un intero (il quoziente della divisione tra interi);

– divisione tra numeri in virgola mobile, se almeno uno degli argomenti è in virgola mobile.

Esempio:

System.out.println(7.0 / 4.0);
System.out.println(7.0 / 4);
System.out.println(7 / (double) 4);
System.out.println(7 / 4);
I primi tre stampano 1.75, mentre l’ultimo stampa 1.

L’operatore di modulo restituisce il resto della divisione intera. Il modulo n % d è calcolato come segue:

n % d = n – ( (n/d) * d )

Esempio:

System.out.println(7 % 4); Stampa 3.

Gli operatori di incremento e decremento possono essere applicati solo ad una variabile, e ne aumentano o diminuiscono il valore di un’unità. Questi operatori esistono in due versioni: prefissa e postfissa.

Esempio:

int n = 5, m = 5;
System.out.println(n++); Stampa 5, valore vecchio di n e ne incrementa la variabile di una unità.
System.out.println(n); Stampa 6, il nuovo valore di n.
System.out.println(++m); Stampa 6, m viene prima incrementato e poi stampato.
System.out.println(m); Stampa 6.

Altri operatori di assegnamento presenti in Java, sono i seguenti:

int x = 5;
double y = 3.14;
x += 7; (che equivale a x = x + 7;)
x += 7; (che equivale a y = y * 2.5;)
x -= 7; (che equivale a x = x – 7;)
y /= 4; (che equivale a y = y / 4;)
int var = 0;
var += 10; (che equivale a var = var + 10)

Un comando di assegnamento è anche un’espressione, che restituisce il valore assegnato.

System.out.println(x = 74); Assegna 74 a x e stampa 74
x = y *= 3; Associa a destra: equivale a x = (y = y * 3)

Cosa ne pensate?

In caso di dubbi o consigli lasciate un commento!
Grazie per l’attenzione.