Sono consapevole se si effettuaIn che modo JVM riutilizza le sottostringhe String internate?
for (condition) {
String s = "hi there";
}
Solo un String
istanza viene creato in tutte le iterazioni, a differenza String s = new String("hi there");
che creerà una nuova istanza in ogni iterazione.
Ma, leggendo Effective Java da Joshua Bloch: capitolo 2 punto 5 (pagina 20) si afferma:
Inoltre, è garantito che l'oggetto sarà riutilizzato da qualsiasi altro codice in esecuzione nello stesso la macchina virtuale che succede a contiene la stessa stringa letterale [JLS, 3.10.5].
per quanto ne so che non dice capita di essere la stessa stringa letterale, si dice contiene.
La lettura di [JLS, 3.10.5] non riesce a trovare alcun riferimento esatto a questo e ho un dubbio.
Dare questo frammento:
String s1 = "hi ";
String s2 = "there";
String s3 = "hi there";
Come molti casi vengono creati?
- 3 istanze (quindi, la frase non è proprio esatta).
- 2 casi,
s1
es2
(pois3
viene creato il riutilizzos1
es2
riferimenti)
Probabilmente significa "la macchina virtuale contiene ..", non la stringa contiene un'altra stringa –
Non sono sicuro, quindi un commento invece di una risposta. Ma penso che il "contenere" sia parzialmente sbagliato e il tuo esempio in effetti fornisce tre esempi. – glglgl
@glglgl in realtà è ciò che * la mia logica * dice, ma può essere JVM abbastanza intelligente da creare 's3' come riferimento a' s1' + 's2' ?? –