Mi sono imbattuto in una classe che include più usi di una stringa letterale, "pippo".Utilizzo di stringhe stringa identiche anziché di una variabile finale?
Quello che mi piacerebbe sapere, è quali sono i benefici e l'impatto (in termini di creazione di oggetti, utilizzo della memoria e velocità) di utilizzare questo metodo invece di dichiarare la stringa come definitiva e la sostituzione di tutti i letterali con la finale variabile?
Ad esempio (anche se ovviamente non è un reale utilizzo word):
private static final String FINAL_STRING = "foo";
public void stringPrinter(){
for(int i=0;i<10;i++){
System.out.println(FINAL_STRING);
}
}
versi:
public void stringPrinter(){
for(int i=0;i<10;i++){
System.out.println("foo");
}
}
Che è preferibile e perché (assumendo che il valore di stringa rimarrà costante)?
Se il precedente esempio (secondo) risultasse in 10 oggetti String creati, la JVM si renderebbe conto che solo un singolo letterale viene effettivamente utilizzato e crea un riferimento singolo. In tal caso, c'è qualche vantaggio nel dichiarare la stringa come definitiva (come nel primo esempio)?
Se il codice interpretato fa sostituire la stringa letterale con un unico riferimento, vuol ancora applica se stesso letterale avviene in più di un posto:
public void stringPrinter(){
for(int i=0;i<5;i++){
System.out.println("foo"); // first occurence
System.out.println("foo"); // second occurence
}
}
Non darei per scontato che lo sviluppatore precedente abbia scelto di ripetere i letterali usando una costante, sembra proprio pigrizia. –
Stranamente, in realtà avevano dichiarato la costante ma non l'avevano usata. Quindi perché ero interessato alla possibile ragione. Ma d'accordo, penso che fosse solo pigrizia. – Mikaveli