Ok, questa domanda è un'estensione di questa domandaNon dovrei fare `String s = new String (" una nuova stringa ");` in Java, anche con internamento automatico delle stringhe?
Java Strings: "String s = new String("silly");"
La domanda di cui sopra ha chiesto la stessa domanda come questo, ma ho un nuovo punto di dubitare.
Secondo Effective Java
e le risposte di cui sopra domanda, dovremmo non fare String s = new String("a new string");
, perché che creare l'oggetto inutile.
Non sono sicuro di questa conclusione, perché penso che Java stia facendo automatic string interning, che significa per una stringa, comunque c'è solo una copia di esso nella memoria.
Quindi vediamo String s = new String("a new string");
.
è già una stringa che è stata creata nella memoria.
Quando faccio String s = new String("a new string");
, quindi s
è anche . Quindi, secondo automatic string interning
, s
deve essere indirizzato allo stesso indirizzo di memoria di "a new string"
, giusto?
Quindi come possiamo dire che creiamo oggetti non necessari?
Là * è * solo una copia di String * a meno che non si esegua 'new String (...)' *. Non farlo a meno che non sia necessario. –
+1 per domande interessanti, non ci ho mai pensato. Tuttavia, il più delle volte è possibile controllare questa roba esaminando le differenze (o la mancanza di differenze) nel bytecode tra le 2 versioni. –
'intern'ing viene eseguito automaticamente solo su letterali' String'. – Jeffrey