Ein String wird dann freigegeben, wenn keine Referenz mehr auf ihn existiert. Damit hat alzaimar für die Mehrzahl der Fälle (globale Variablen, Felder und lokale Variablen, die an höhere Gültigkeitsbereiche durchgereicht werden) recht. Den String musst du nicht unbedingt in eine Klasse packen, ein Record tut es genauso - allerdings ist der String selbst intern auch eine Art Klasse, also kannst du auch einfach nach Pointer und zurück casten