Я сталкивался с классом, который включает многократное использование строкового литерала "foo".
Я хотел бы знать, каковы преимущества и влияние (с точки зрения создания объекта, использования памяти и скорости) использования этого подхода вместо объявления строки как окончательной и замены всех литералов конечной переменной?
Например (хотя, очевидно, не реальное использование слова):
private static final String FINAL_STRING = "foo";
public void stringPrinter(){
for(int i=0;i<10;i++){
System.out.println(FINAL_STRING);
}
}
Versus:
public void stringPrinter(){
for(int i=0;i<10;i++){
System.out.println("foo");
}
}
Что предпочтительнее и почему (при условии, что строковое значение останется постоянным)?
Приведет ли приведенный выше (второй) пример к созданию 10 объектов String или JVM поймет, что фактически используется только один литерал, и создаст одну ссылку. Если да, есть ли какое-либо преимущество в объявлении строки как окончательной (как в первом примере)?
Если интерпретируемый код заменяет строковый литерал одной ссылкой, это все равно применяется, если один и тот же литерал встречается в нескольких местах:
public void stringPrinter(){
for(int i=0;i<5;i++){
System.out.println("foo"); // first occurence
System.out.println("foo"); // second occurence
}
}