JAVA

Tipi Di Dati Primitivi

Java: variabili, tipizzazione forte e costrutti final per le costanti. Classificazione degli otto tipi di dati primitivi e confronto con l'ambiente C++.

Durata

60 minuti

Software

JDK 21 e terminale del sistema operativo

Linguaggio

JAVA

Fondamenti Di Java | Tipi Di Dati Primitivi

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:

[tipo_di_dato] nome_variabile = valore_iniziale;
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 (solo true o false).
  • 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;
Regola d'oro per la scelta dei nomi:
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

Variabile Tipizzazione forte Tipi primitivi Boolean (true/false) Unicode String final (Costante) Concatenazione (+)


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:
JavaDatiPrimitivi/ (Nuova cartella sul Desktop)
└── 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("============================");
    }
}

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:
JavaDatiPrimitivi/
├── ProfiloGiocatore.java
└── ProfiloGiocatore.class (Bytecode generato per la JVM)

Verifica delle competenze: Gestione dei Tipi Primitivi

Nota per il registro: Verifica asincrona sul trattamento dei dati primitivi in Java 21. Test strutturato a risposta multipla su: regole di forte tipizzazione, differenze sintattiche rispetto a C/C++ (Unicode e boolean puro), uso delle costanti final ed effetti della concatenazione.

1. Cosa si intende quando si dice che Java è un linguaggio fortemente tipizzato (strong-typed)?


2. Qual è la sintassi corretta per inizializzare una variabile di tipo carattere (char) in Java?


3. Quali sono gli unici due valori ammessi da una variabile dichiarata con il tipo di dato primitivo "boolean"?


4. Perché la riga di codice "float prezzo = 19.99;" genera un errore in fase di compilazione?


5. Quale compito svolge il simbolo più (+) nell'istruzione: System.out.println("Livello: " + livello); ?



In sintesi

Argomenti: concetti principali, riepilogo, competenze

  1. Java è fortemente tipizzato: ogni variabile ha un tipo fisso e immutabile.
  2. I tipi primitivi sono 8; i più usati sono int per gli interi e double per i decimali.
  3. Il tipo boolean accetta solo true o false e non corrisponde a 0 o 1.
  4. Il tipo char occupa 2 byte e supporta la codifica internazionale Unicode.
  5. Le costanti si dichiarano anteponendo la parola chiave final e si scrivono in MAIUSCOLO.

Cosa hai imparato
  1. A mappare la classificazione strutturale tra tipi di dati primitivi e tipi oggetto (riferimento).
  2. Le differenze di gestione dei tipi booleani e dei caratteri (Unicode vs ASCII) tra l'ambiente C++ e Java.
  3. L'uso corretto dei suffissi obbligatori per i tipi di dati speciali come il valore letterale L per long e F per float.
  4. L'applicazione pratica dell'operatore di concatenazione per generare stringhe dinamiche di output sul terminale.


Variabili, Tipi di dati, Primitivi, Costanti, String, Boolean, Java,