Sobes.tech
Intern

Qual è la differenza tra tipi di dati primitivi e di riferimento?

sobes.tech AI

Risposta dell'AI

I tipi primitivi memorizzano direttamente il valore, mentre i tipi di riferimento memorizzano un riferimento (indirizzo in memoria) all'oggetto che contiene il valore.

Tipi primitivi:

  • Occupano una dimensione fissa e piccola in memoria.
  • Vengono trasmessi per valore (il valore stesso viene copiato).
  • Iniziano con una lettera minuscola.
  • Includono: byte, short, int, long, float, double, boolean, char.
// Esempio di tipo primitivo
int a = 10;
int b = a; // Copia il valore 10
b = 20;   // Solo b cambia, a rimane 10

Tipi di riferimento:

  • Occupano quantità di memoria diverse, a seconda del contenuto dell'oggetto.
  • Vengono trasmessi per riferimento (l'indirizzo dell'oggetto viene copiato). La modifica dell'oggetto tramite il riferimento influisce su tutte le variabili che lo riferiscono.
  • Iniziano generalmente con una lettera maiuscola (classi).
  • Includono: classi (String, Object, classi personalizzate), interfacce, array.
// Esempio di tipo di riferimento
String str1 = new String("Hello");
String str2 = str1; // Copia il riferimento all'oggetto "Hello"
str2 = "World";   // str2 ora punta a un nuovo oggetto "World". str1 punta ancora a "Hello".

// Altro esempio con oggetto mutabile
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
ArrayList<Integer> list2 = list1; // Copia il riferimento allo stesso oggetto ArrayList
list2.add(2); // Aggiunge un elemento all'oggetto accessibile tramite entrambe le referenze
// Ora list1 contiene [1, 2] e list2 contiene [1, 2]

Tabella comparativa rapida:

Proprietà Tipi primitivi Tipi di riferimento
Memorizzazione Valore Riferimento all'oggetto
Trasmissione Per valore Per riferimento
Dimensione memoria Fisso e piccolo Variabile
Inizia con Minuscola Generalmente con maiuscola
Nullabilità Non possono essere null Possono essere null

I tipi primitivi vengono avvolti in classi wrapper (come Integer per int) per poterli trattare come oggetti.