come viene creato l’object tramite System.out.println (“Morning”), RAGGIUNGIBILE?

Nella seguente dichiarazione

System.out.println("Morning"); 

l’object contenente il valore “Mattina” viene creato all’interno del pool di stringhe. E non stiamo memorizzando il suo indirizzo esplicitamente. Ma ancora questo object è raggiungibile.

Se proviamo a fare di nuovo System.out.println("Morning"); la JVM riutilizza l’object creato precedentemente così com’è esistente nel pool di stringhe, non crea un nuovo object.

In che modo JVM tiene traccia di questo object, anche se non lo memorizziamo esplicitamente?

"Morning" è una stringa letterale. Tutti i letterali stringa vengono aggiunti al pool di costanti String quando la class viene caricata.

E non stiamo memorizzando il suo indirizzo esplicitamente

Sia che archiviamo il riferimento o meno non ha nulla a che fare con l’aggiunta di letterali String al pool di costanti. Tutto all’interno di "" va lì.

Ma ancora questo object è raggiungibile.

Di nuovo, la raggiungibilità non ha nulla a che fare con l’aggiunta e il recupero dal pool di costanti String. Come fa la JVM potrebbe essere specifico per la JVM ma alcune JVM potrebbero aggiungere stringhe di costanti di class al pool di costanti String durante il caricamento della class.