- Dichiarare, inizializzare e utilizzare correttamente le variabili in Java.
- Selezionare il tipo di dato primitivo più efficiente in base al dominio del problema.
- Comprendere la differenza tra tipi di dati primitivi e tipi di dati orientati agli oggetti (Riferimenti).
- Definire e utilizzare costanti immutabili all'interno del codice.
Per poter creare programmi utili e dinamici, l'"Hello World" non basta più: abbiamo bisogno di memorizzare informazioni, manipolarle ed effettuare calcoli. In questa lezione analizzeremo come Java gestisce la memoria attraverso le variabili, i tipi di dati e le costanti.
Cos'è una variabile in Java?
Definizione: contenitore di memoria | Tipizzazione: fortemente tipizzato | Stile: camelCase
Una variabile è un'area di memoria a cui viene assegnato un nome (identificatore) e che contiene un valore che può variare durante l'esecuzione del programma. Java è un linguaggio fortemente tipizzato (strongly typed): significa che ogni variabile deve essere dichiarata esplicitamente con il suo tipo prima di poter essere usata, e quel tipo non potrà mai più cambiare.
La sintassi formale per dichiarare e inizializzare una variabile in Java è la seguente:
Anatomia della Sintassi: cosa inserire nei tre blocchi?
-
1. [tipo_di_dato] : Definisce la natura del dato e lo spazio che occuperà nella RAM. Puoi usare uno degli 8 tipi primitivi:
int,short,byte,long→ Per i numeri interi (es. 10, -5).double,float→ Per i numeri decimali con il punto (es. 19.99, 3.14).char→ Per un singolo carattere tra apici singoli (es. 'A').boolean→ Per un valore logico (solotrueofalse).
-
2. nome_variabile (Riferimento): È l'identificatore, ovvero il nome scelto dal programmatore che funge da riferimento univoco a quell'area di memoria. Per convenzione tassativa in Java si usa lo stile lowerCamelCase: il nome inizia con la minuscola e le parole successive hanno l'iniziale maiuscola (es.
temperaturaStanza,votoInformatica). Non può contenere spazi o iniziare con numeri. -
3. valore_iniziale : È il dato di partenza inserito nella variabile attraverso l'operatore di assegnazione (
=). Deve essere strettamente compatibile con il tipo dichiarato a inizio riga, pena un errore bloccante del compilatore.
Applicando questo schema, la dichiarazione segue la stessa struttura del C++:
int eta = 18;
double prezzo = 19.99;
I nomi delle variabili devono essere autoesplicativi (mnemonici). È una pessima abitudine scolastica usare nomi a singola lettera come
int x; o double d;. Scrivere invece int contatoreAlunni; rende il codice immediatamente leggibile e professionale.
I 8 Tipi di Dati Primitivi
Numerici: interi e decimali | Logici: boolean | Testuali: char
In Java esistono due grandi categorie di tipi di dati: i Tipi Primitivi (ereditati dalla logica del C) e i Tipi Oggetto/Riferimento. I tipi primitivi sono esattamente otto, integrati nel linguaggio, e occupano sempre lo stesso spazio in memoria su qualsiasi sistema operativo:
| Tipo | Spazio in Memoria | Descrizione / Uso principale | Esempio di valore |
|---|---|---|---|
byte |
1 byte (8 bit) | Numeri interi piccolissimi (da -128 a 127). | byte fari = 2; |
short |
2 byte (16 bit) | Numeri interi piccoli (da -32.768 a 32.767). | short anno = 2026; |
int |
4 byte (32 bit) | Il tipo standard per i numeri interi. | int popolazione = 540000; |
long |
8 byte (64 bit) | Interi enormi. Richiede la lettera L alla fine del valore. |
long distanza = 9876543210L; |
float |
4 byte (32 bit) | Decimali a singola precisione. Richiede la lettera f. |
float nota = 7.5f; |
double |
8 byte (64 bit) | Il tipo standard per i numeri decimali (doppia precisione). | double piGreco = 3.14159; |
char |
2 byte (16 bit) | Un singolo carattere. Usa l'apice singolo ed adotta la codifica Unicode. | char sezione = 'A'; |
boolean |
1 bit (concettuale) | Valori logici. Può essere solo true o false. |
boolean promosso = true; |
Curiosità Architetturale: La dimensione reale del tipo boolean
A livello concettuale, il tipo boolean memorizza un singolo bit di informazione (true o false). Tuttavia, la specifica ufficiale di Java non definisce in modo rigido la sua dimensione fisica nella RAM. Nella maggior parte delle Java Virtual Machine (JVM) moderne, un boolean isolato viene allocato occupando 1 intero byte (8 bit) per motivi di allineamento della memoria con i registri della CPU, ottimizzando così le prestazioni di lettura e scrittura sul processore.
Differenze cruciali rispetto al C/C++
Sicurezza: controllo dei tipi | Boolean: tipo puro | Caratteri: supporto internazionale
Chi ha già programmato in C o C++ deve prestare attenzione a tre differenze macroscopiche che Java introduce per evitare bug storici:
1. Il tipo boolean è un tipo puro
In C/C++ i valori booleani sono intercambiabili con gli interi (0 significa falso, qualsiasi altro numero significa vero). In Java non è così. Un intero non può essere convertito o interpretato come booleano. Se scrivi un costrutto condizionale, la condizione deve restituire un boolean puro.
2. Il tipo char usa Unicode, non ASCII
In C, un char occupa 1 byte ed è limitato alla tabella ASCII standard. In Java, un char occupa 2 byte perché implementa la codifica Unicode. Questo permette a Java di memorizzare nativamente simboli, lettere accentate di qualsiasi lingua, ideogrammi orientali o emoji.
3. Le Stringhe non sono array di char primitivi
In Java, i testi non si gestiscono con array di caratteri terminati da \0. Esiste un tipo di dato apposito (di tipo Oggetto) chiamato String (con la S maiuscola) che racchiude i testi tra virgolette doppie:
String scuola = "Istituto Tecnico LabInfo";
Le Costanti in Java: la parola chiave final
Immutabilità: valore bloccato | Stile: TUTTO_MAIUSCOLO
Una costante è una variabile il cui valore, una volta assegnato in fase di inizializzazione, non può più essere modificato. In C++ si utilizzava la parola chiave const; in Java si utilizza la parola chiave final.
final double ALIQUOTA_IVA = 22.0;
// ALIQUOTA_IVA = 4.0; // Genererebbe un errore di compilazione bloccante!
Per convenzione di stile, i nomi delle costanti si scrivono interamente in lettere maiuscole, separando le parole con un trattino basso (underscore).
Parole chiave da ricordare
LABORATORIO
Variabili e Tipi di Dato Primitivi
Ogni software ha bisogno di memorizzare informazioni nella memoria RAM del computer. In questo laboratorio analizzeremo i dati primitivi di Java creando la scheda tecnica strutturata di un videogiocatore.
1 Il concetto di Variabile e Tipizzazione Forte
Una variabile è semplicemente uno spazio riservato all'interno della memoria RAM destinato a contenere un valore modificabile durante l'esecuzione del programma. Java richiede obbligatoriamente di dichiarare in anticipo il tipo esatto di dato che quella casella di memoria dovrà ospitare. Non potremo mai inserire un testo dentro una variabile nata per contenere numeri interi.
Organizzazione del file di progetto:
└──
ProfiloGiocatore.java (Classe driver principale)
2 Scrittura del file ProfiloGiocatore.java
Crea il file ProfiloGiocatore.java all'interno della cartella di progetto e inserisci il seguente codice sorgente strutturato:
public class ProfiloGiocatore {
public static void main(String[] args) {
// 1. TIPI INTERI (Senza virgola)
int livello = 42;
long puntiEsperienza = 1500850L; // Richiede il suffisso 'L' per costanti numeriche grandi
// 2. TIPI DECIMALI (Con virgola espressa tramite il punto)
double moltiplicatorePunteggio = 1.5; // Tipo decimale standard di riferimento
float saluteEnergia = 98.7F; // Richiede tassativamente il suffisso 'F'
// 3. TIPO CARATTERE (Un singolo simbolo universale)
char rangoIniziale = 'A'; // Un solo carattere racchiuso tra APICI SINGOLI
// 4. TIPO BOOLEANO (Logica binaria puro)
boolean isOnline = true; // Può essere solo true oppure false
// --- OUTPUT SUL TERMINALE ---
System.out.println("====== PROFILO UTENTE ======");
System.out.println("Livello attuale: " + livello);
System.out.println("Punti EXP totali: " + puntiEsperienza);
System.out.println("Moltiplicatore bonus: x" + moltiplicatorePunteggio);
System.out.println("Percentuale salute: " + saluteEnergia + "%");
System.out.println("Rango in classifica: " + rangoIniziale);
System.out.println("Stato connessione online: " + isOnline);
System.out.println("============================");
}
}
+)All'interno delle istruzioni
System.out.println il simbolo più (+) agisce come operatore di concatenazione: unisce la stringa di testo fissa al valore contenuto nella variabile, convertendolo automaticamente in stringa sul terminale.
3 Compilazione ed Esecuzione da Terminale
Apri il terminale del tuo sistema operativo, spostati nella directory corretta ed esegui le operazioni di routine:
# Posizionamento e compilazione
cd ~/Desktop/JavaDatiPrimitivi
javac ProfiloGiocatore.java
# Esecuzione del Bytecode
java ProfiloGiocatore
Stato finale della cartella dopo la compilazione:
├──
ProfiloGiocatore.java└──
ProfiloGiocatore.class (Bytecode generato per la JVM)
====== PROFILO UTENTE ======
Livello attuale: 42
Punti EXP totali: 1500850
Moltiplicatore bonus: x1.5
Percentuale salute: 98.7%
Rango in classifica: A
Stato connessione online: true
============================
Se provi a scrivere
int livello = "Quarantadue";, il compilatore javac bloccherà lo sviluppo segnalando l'errore: "error: incompatible types: String cannot be converted to int". Questa è la garanzia di sicurezza della tipizzazione forte di Java.
Verifica delle competenze: Gestione dei Tipi Primitivi
In sintesi
Argomenti: concetti principali, riepilogo, competenze
- Java è fortemente tipizzato: ogni variabile ha un tipo fisso e immutabile.
- I tipi primitivi sono 8; i più usati sono
intper gli interi edoubleper i decimali. - Il tipo
booleanaccetta solotrueofalsee non corrisponde a 0 o 1. - Il tipo
charoccupa 2 byte e supporta la codifica internazionale Unicode. - Le costanti si dichiarano anteponendo la parola chiave
finale si scrivono in MAIUSCOLO.
- A mappare la classificazione strutturale tra tipi di dati primitivi e tipi oggetto (riferimento).
- Le differenze di gestione dei tipi booleani e dei caratteri (Unicode vs ASCII) tra l'ambiente C++ e Java.
- L'uso corretto dei suffissi obbligatori per i tipi di dati speciali come il valore letterale
Lper long eFper float. - L'applicazione pratica dell'operatore di concatenazione per generare stringhe dinamiche di output sul terminale.