Junior
Cos'è un pool di stringhe in Java?
sobes.tech AI
Risposta dell'AI
Il String Pool (Pool di String) è un'area nell'heap (memoria) della JVM dove vengono memorizzati i letterali di stringa. Quando la JVM incontra un letterale di stringa, verifica prima in questo pool. Se la stringa esiste già, restituisce un riferimento all'oggetto esistente. Se non, crea un nuovo oggetto stringa nel pool e restituisce un riferimento ad esso.
Vantaggi:
- Risparmio di memoria: Diversi riferimenti possono puntare allo stesso oggetto stringa nel pool.
- Prestazioni: Il confronto di riferimenti (==) per le stringhe nel pool è più veloce rispetto al confronto del contenuto delle stringhe (equals()).
Esempio:
// Crea una stringa nel pool (se non esiste già)
String s1 = "hello";
// Restituisce un riferimento allo stesso oggetto "hello" dal pool
String s2 = "hello";
// s1 e s2 puntano allo stesso oggetto
System.out.println(s1 == s2); // Mostrerà true
// Crea un nuovo oggetto stringa "hello" nell'heap, non nel pool
String s3 = new String("hello");
// s1 e s3 puntano a oggetti diversi
System.out.println(s1 == s3); // Mostrerà false
// Il contenuto delle stringhe è uguale
System.out.println(s1.equals(s3)); // Mostrerà true
Il metodo intern() può essere usato per aggiungere esplicitamente una stringa creata con new String() al pool o per ottenere un riferimento a una stringa esistente nel pool con lo stesso contenuto.
// Crea un nuovo oggetto stringa "world" nell'heap
String s4 = new String("world");
// Aggiunge "world" al pool (se non è già presente) e restituisce il riferimento
String s5 = s4.intern();
// Crea una stringa nel pool (riferimento allo stesso oggetto a cui ora punta s5)
String s6 = "world";
// s5 e s6 puntano allo stesso oggetto nel pool
System.out.println(s5 == s6); // Mostrerà true