![]() ![]() |
|
![]() ![]() |
Nel paradigma di programmazione a oggetti, i dati manipolabili coi
programmi sono istanze di classi, detti oggetti (impareremo presto cosa sono).
Java non è un linguaggio a oggetti puro e mette invece a disposizione alcuni tipi di dato primitivi di uso comune per renderne più agevole la manipolazione. I tipi di dato primitivi di Java sono elencati nella seguente tabella.
Quindi ci sono quattro tipi primitivi per numeri interi e due per numeri in virgola mobile. Gli interi sono rappresentati in complemento a due. L'intervallo di valori per ogni tipo di interi è fissato dal linguaggio (indipendente dalla piattaforma), a differenza ad esempio del linguaggio C dove lo stesso tipo può essere codificato con un diverso numero di bit a seconda della macchina dove si compila il programma. |
![]() ![]() |
|
![]() ![]() |
In un comando di assegnamento, il valore dell'espressione
a
destra del simbolo =
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.
Il programmatore può comunque
forzare una conversione tra
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:
|
![]() ![]() |
|
![]() ![]() |
Le costanti numeriche (literals) si
scrivono
nella forma usuale:
Suggerimento: per evitare problemi, usare solo i tipi int e double. |
![]() ![]() |
|
![]() ![]() |
Per cercare di capire quale tipo
di dato il compilatore
associa ad una costante numerica, si
guardino con attenzione gli
esempi mostrati nella seguente
tabella (riportati nel programma
CostantiNumeriche.java), ed
il commento a fianco. Il modo migliore per
comprenderli è
eseguirli di persona e leggere
l'eventuale messaggio di errore del
compilatore.
|
![]() ![]() |
|
![]() ![]() |
In Java sono disponibili i
seguenti operatori aritmetici,
elencati in ordine decrescente di
priorità.
Ad esempio 33 / 11 + 27 * 9 viene valutato come (33 / 11) + (27 * 9).Inoltre tutti gli operatori associano a sinistra. Ad esempio, 34 + 27 + 2 viene valutato come (34 + 27) + 2.
Tutti gli operatori, se applicati a interi, restituiscono un valore int o long, mai byte o short. |
![]() ![]() |
|
![]() ![]() |
Gli operatori aritmetici usuali hanno il significato che
ci si
aspetta. Fa eccezione l'operatore di divisione, che
può
avere due diversi significati:
L'operatore di modulo
restituisce il resto della
divisione intera.
Il modulo n % d è
calcolato come segue:
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.
Il risultato di semplici operazioni su valori in virgola mobile può manifestare inattesi errori di approssimazione. Ad esempio,
Questo è dovuto al fatto che numeri decimali come 2.1 hanno, nella rappresentazione binaria, una espansione infinita (periodica), e quindi non possono essere rappresentati in modo esatto come double: la loro espansione sarà opportunamente troncata. Questo errore di rappresentazione si manifesta nella valutazione di certe espressioni. Come in tutti i linguaggi
di
programmazione, anche in Java si possono verificare i
fenomeni di
overflow e
underflow. As esempio, si
assegni ad una
variabile di tipo int il
massimo intero
rappresentabile, 2147483647, le si
aggiunga
1 e si stampi il risultato: quale
sarà?
A differenza di altri linguaggi, in Java le
situazioni di overflow e
underflow non dipendono dal
computer.
|
![]() ![]() |
|
![]() ![]() |
In Java esistono altri operatori
di assegnamento
(eredità di C e
C++), che sono semplicemente
delle
abbreviazioni sintattiche.
Un comando di assegnamento è anche un'espressione, che restituisce il valore assegnato.
Abbiamo visto diversi modi per incrementare una variabile:
Sono tutti equivalenti?
Raccomandazioni per una buona programmazione :
|