Si consideri il seguente codiceQuando vengono create/distrutte stringhe costanti?
public static void method(String[] srgs){
try{
}catch(){
System.out.println("Hello World" + "one");}
catch(..){
System.out.println("Hello World" + "two");}
catch(..){
System.out.println(getString());}
}
Quando vengono queste stringhe create? Presumo che le stringhe verranno create quando si verifica un'eccezione in fase di esecuzione. La stringa viene creata in fase di esecuzione e viene visualizzata. Un mio pari mi dice che siccome queste stringhe sono costanti, verranno create non appena la classe verrà caricata. È corretto?
Quando vengono raccolte le spazzature delle stringhe? Vengono raccolti dei rifiuti? Supponendo che lo stesso metodo possa essere richiamato più volte nei programmi di vita non ha senso solo memorizzarli nella cache?
Grazie Joachim, si consideri SOP ("Hello World" + getstr()), in questo caso la stringa costante è ancora creata? Quando viene eseguita questa riga viene creata una seconda stringa? Viene raccolta la seconda stringa di garbage collection? Potete indicarmi una fonte da cui avete risposto al punto 1. – Geek
Ho collegato la sezione pertinente del JLS. '" HelloWorld "+ getstr()' is ** not ** a 'String' literal ('anche se * contiene * uno:' "Hello World" '). Un nuovo oggetto 'String' viene prodotto ogni volta che viene eseguita la riga e che l'oggetto è garbage collection normalmente. –
@JoachimSauer il caso di "HelloWorld" + getstr() 1 .Verrà ancora creato "HelloWorld" quando la classe viene caricata? 2. Abbiamo bisogno di usare cosa fare se non vogliamo impedire alla stringa di essere raccolta dati inutili, la nuova stringa ("HelloWorld") è d'aiuto? – Jaskey