Sobes.tech
Junior

A cosa serve il String Pool in Java?

sobes.tech AI

Risposta dell'AI

Il String Pool in Java è necessario per:

  • Risparmio di memoria: Previene la creazione di duplicati di letterali di stringa. Se una stringa con lo stesso valore esiste già nel pool, viene usata una referenza ad essa.
  • Ottimizzazione delle prestazioni: Il confronto di letterali di stringa (==) diventa rapido, poiché vengono confrontate le referenze, non il contenuto delle stringhe.

Quando si creano letterali di stringa (String s = "hello";), la JVM verifica prima il String Pool. Se "hello" esiste già, s fa riferimento all'oggetto esistente. Altrimenti, viene creato un nuovo oggetto "hello" nel pool, e s fa riferimento ad esso.

L'uso del costruttore new String("hello") crea sempre un nuovo oggetto String nell'heap, indipendentemente dal String Pool. Per inserirlo nel pool, bisogna chiamare il metodo intern().

// Esempio di funzionamento del String Pool

String s1 = "hello"; // Verifica il String Pool, crea se necessario, fa riferimento al pool
String s2 = "hello"; // Verifica il String Pool, trova quello esistente, fa riferimento al pool

System.out.println(s1 == s2); // true - le referenze sono uguali

String s3 = new String("hello"); // Crea un nuovo oggetto nell'heap

System.out.println(s1 == s3); // false - le referenze sono diverse

String s4 = s3.intern(); // Verifica il String Pool per il contenuto di s3.
                         // Poiché "hello" è già nel pool (da s1/s2),
                         // s4 fa riferimento all'oggetto nel pool.

System.out.println(s1 == s4); // true - s1 e s4 fanno riferimento allo stesso oggetto nel pool