Esiste un vantaggio in termini di prestazioni utilizzando uno private final static String
in java vs utilizzando una variabile stringa locale che deve essere "inizializzata" ogni volta che si accede al metodo?Stringhe Java: prestazioni statiche private vs variabili locali
Penso che l'uso delle stringhe private static final
sia una buona pratica per le costanti che vengono riutilizzate in diverse parti di una classe, tuttavia se una stringa dovesse essere utilizzata solo in un metodo, in una posizione, per un motivo molto specifico che nessun altro metodo è preoccupato, in realtà preferisco mantenere l'interfaccia interna della classe pulita con meno membri privati e usare solo una variabile locale.
Dato che Java ha String internato, e in realtà mantiene un piscina con una sola copia di ogni stringa che viene dichiarata utilizzando le virgolette (String s = "some string"
), sarebbe in realtà ci sia un calo di prestazioni da dover dichiarare/inizializzazione/assegnare la variabile ogni tempo in cui si accede al metodo utilizzando una stringa statica?
Per rendere un po 'più chiaro, ci sarebbe alcuna differenza tra l'utilizzo di SS
o LS
?
class c {
private final static String SS = "myString";
private void method(){
//do something with SS
}
private void OtherMethod(){
String LS = "myOtherString"
//do same thing with LS
}
}
"* mantiene un pool con una singola copia di ogni stringa diversa *" questo non è corretto. Le sole stringhe di interni di Java (a meno che non si chiami 'String.intern()') sono '' quoted ''costanti nel codice. Le stringhe costruite in fase di esecuzione * non * sono internate nel pool di costanti. – dimo414
hai ragione, quelli in cui quelli a cui mi riferivo, io modificherò –