Per "tipi primitivi" di un linguaggio si intendono i tipi di dato già definiti nel linguaggio e dai quali si può partire con la costruzione di espressioni, o di tipi composti.
I tipi sono molto importanti in tutti i linguaggi di programmazione tipati, e sono fondamentali in Java che è un cosiddetto linguaggio fortemente tipato. Il concetto di tipo è molto naturale, se vediamo un numero, ed esempio 15.4, possiamo immaginare facilmente che può appartenere all'insieme dei numeri reali.
Esaminiamo operazione come 4 / 5:
4 - è di intero intero5 - è di tipo intero/ - (divisione) è un operatore (una funzione) che prende due interi e restituisce un reale, formalmente si scrive così:/ : int × int -> float
quindi possiamo dire che tutta l'espressione 4/5 è di tipo intero. Questa che abbiamo fatto è all'incirca una inferenza di tipi, in informatica è una pratica molto attuata, che per essere spiegata tutta, come per i modelli ad oggetti, avrebbe bisogno di un corso intero.
I problemi non sono con queste espressioni, cosiddette chiuse, che non hanno variabili, ma con quelle con le variabili, ogni linguaggio usa una sua tecnica, chi non tipa le espressioni, chi stabilisce il tipo dal contesto della espressione e ne da un tipo in conseguenza anche alle singole espressioni e chi come Java fa dichiarare i tipi di tutte le variabili all'inizio.
I tipi primitivi di Java sono simili a quelli degli altri linguaggi di programmazione, solo che assumono calori leggermente diversi.
| Tipo | Valore |
|---|---|
boolean | valori che possono essere true e false |
char | i caratteri, sono di 16 bit, e sono codificati Unicode 1.1.5, negli altri linguaggi sono ASCII, di soli 8 bit |
byte | interi di 8 bit con segno, ovvero numeri compresi tra meno (due alla settima) e due alla ottava |
short | interi di 16 bit con segno |
int | interi di 32 bit con segno |
long | interi di 64 bit con segno |
float | reali di 32 bit in virgola mobile (IEEE 754-1985) |
double | reali di 64 bit in virgola mobile (IEEE 754-1985) |
boolean | assume solo valori true e false |
Da questi ovviamente è possibile definire nuovi tipi di dato che vengono detti tipi composti, ad esempio gli array o nuove classi.
Come abbiamo visto nella precedente lezione nel package java.lang ci sono i "contenitori" per questi tipi di base, ovvero se dichiariamo int ci riferiamo ad un intero, mentre se dichiariamo Integer ci riferiamo alla classe interi.
Utilizzando le classi, avremo anche una serie di attributi e metodi, ad esempio in alcuni saranno definite le costanti MIN_VALUE e MAX_VALUE (Minimo e massimo valore), nelle classi Float e Double ci saranno le costanti NEGATIVE_INFINITY e POSITIVE_INFINITY, NaN per indicare un valore non valido e il metodo isNan() per controllare se un valore è valido, ad esempio si può utilizzare dopo una divisione per controllare che non sia stata fatta una divisione per zero.
Vediamo quali sono i letterali di ogni tipo di Java, ovvero i valori costanti che ogni tipo può assumere.
L'unico letterale per i riferimenti agli oggetti è null, si può utilizzare ovunque si aspetti un riferimento ad un oggetto, null è un oggetto non creato o non valido, esso non è di nessun tipo.
I letterali booleani sono true e false, ad indicare rispettivamente il valore vero e il valore falso.
I letterali interi sono stringhe di cifre ottali, decimali o esadecimali. L'inizio della costante serve a dichiarare la base del numero, uno zero iniziale indica la base otto, 0x o 0X indica la base 16 e niente indica la notazione decimale. Ad esempio il numero 15 in base dieci può essere rappresentato come:
15 - notazione decimale 017 - notazione ottale 0xf - notazione esadecimale.
Le costanti intere che terminano con l o L sono considerate long, meglio che terminino con L, perché l si confonde facilmente con l'unità (non dal compilatore, ma da noi che leggiamo i programmi), se non hanno lettera terminale sono considerati degli int.
Se un letterale int viene assegnato direttamente ad uno short o ad un byte viene trattato come se fosse tale.
I letterali in virgola mobile vengono espressi come numeri decimali, con un punto opzionale seguito eventualmente da un esponente che comincia con una e, secondo la usuale notazione mantissa-esponente. Il numero può essere seguito da una f (F) o da una d (D) per indicare che è a precisione singola o doppia, per default sono in precisione doppia.
35, 35. , 3.5e1, .35e2 - denotano lo stesso numero
Lo zero può essere positivo o negativo, confrontandoli si ottiene l'uguaglianza, però è utile nei calcoli, si pensi a 1d/0d e 1d/-0d.
Non è possibile assegnare direttamente una costante double ad una float, anche se entra nel suo range, se si vuole effettuare questa operazione si deve fare un esplicita forzatra detta casting che poi vedremo cos'è.
I caratteri sono racchiusi tra apici, come ad esempio '2', e i caratteri speciali vengono rappresentati da sequenze, dette sequenze di escape:
| Sequenza | Effetto |
|---|---|
\n | newline, va accapo |
\t | tab, tabulazione |
\b | backspace, cancella a sinistra |
\r | return, rappresenta il carattere speciale INVIO |
\f | form feed |
\\ | è il carattere '\', backslash |
\' | apice |
\" | virgolette |
\d | carattere rappresentato in base ottale (es. A corrisponde a \101) |
\xd | carattere rappresentato in esadecimale (es. A corrisponde a \42) |
\ud | carattere rappresentato unicode |
Le stringhe vengono scritte tra virgolette, come ad esempio "Pietro", tutte le sequenze di escape valide possono essere inserite in una strunga, creando cose interessanti, ad esempio:
System.out.println("\tNome:\tPietro\n\tCognome:\tCastellucci" );
darà come risultato:
Nome: Pietro Cognome: Castellucci
Utilizzare OSGi in EclipseArticolo di introduzione all'utilizzo di OSGI in ambiente Eclipse |
Jsoup: parsing semplice di HTML5 in javaPresentazione della libreria JSOUP: un parser molto semplice per... |
The Cube: una demo 3D per Android con JMonkeyUn progetto di demo passo-passo per gestire gli eventi 3d di base in... |
Parsing JSON semplice con google GSONBreve ed essenziale introduzione alla libreria di google per la... |
AppFuse: realizzare un'applicazione completa (implementare i servizi)Prosegue la serie per realizzare una app completa con AppFuse.... |
Guida Apache StrutsIl primo e più utilizzato tra i framework MVC del mondo Java,... |
Guida Java SpringScoprire il lightweight container più famoso del mondo Java.... |
Guida Java 6Prendendo le mosse dalla guida Java, già presente su HTML.it,... |
Ogni mese, direttamente nella tua e-mail: articoli, script e guide su Java, Visual Basic, VB.Net ed i più diffusi linguaggi di programmazione.
Iscriviti alla newsletter
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |