Sono davvero confuso da come string interning funziona in Java. Quando scrivo:Lo internamento delle stringhe viene eseguito in fase di compilazione in Java?
String a = "ABC";
String b = "ABC";
if (a==b)
System.out.println("Equal");
Il compilatore memorizza la stringa letterale "ABC" nel lotto costante di stringhe in fase di compilazione?
Che suona illogico, perché ho pensato che la stringa di piscina costante è stato creato dalla JVM in fase di esecuzione, e non vedo come ciò sia possibile, se lo si fa al momento della compilazione in quanto il compilatore Java non ha nemmeno invocare la JVM .
Se non viene eseguito in fase di compilazione e viene eseguito in fase di esecuzione, perché il seguente comando restituisce false (preso da this answer)?
// But .substring() is invoked at runtime, generating distinct objects
"test" == "!test".substring(1) // --> false
Se eseguito in fase di esecuzione, perché la JVM non riesce a capire che si tratta della stessa stringa?
Sono davvero confuso su come lo string interning funziona in Java e dove viene memorizzato esattamente il pool di stringhe Java.
Il seguente link è perspicace: http://stackoverflow.com/questions/513832/ how-do-i-compare-stringhe-in-java – Zyn
Non sono sicuro della prima parte della tua domanda, ma 'substring' restituisce un * nuovo * oggetto, e così mentre il contenuto di entrambe le stringhe corrisponde a' test ', poiché non sono lo stesso oggetto' == 'restituisce false. –
È il compilatore. Non capisco perché dici che non può sia mettere le stringhe nel pool costante di stringhe.Il compilatore inserirà le stringhe costanti all'interno di una posizione di memoria, quindi all'avvio del programma la JVM caricherà quella memoria e creerà il pool costante da utilizzare in fase di runtime, ma il pool verrà configurato dal compilatore. – Bakuriu