我遇到了一个类,其中包括多次使用字符串字面量"foo"。
我想知道的是,相比于声明字符串为final并将所有字面量替换为该final变量,使用这种方法的好处和影响(在对象创建、内存使用和速度方面)是什么?
例如(虽然显然不是真实的单词用法):
private static final String FINAL_STRING = "foo";
public void stringPrinter(){
for(int i=0;i<10;i++){
System.out.println(FINAL_STRING);
}
}
比较:
public void stringPrinter(){
for(int i=0;i<10;i++){
System.out.println("foo");
}
}
哪种方式更好,为什么(假设字符串值将保持不变)?上面(第二个)示例会创建10个字符串对象吗?还是JVM会意识到实际只使用了一个字面量,并创建一个单一引用。如果是这样的话,将字符串声明为final是否有任何优势(就像第一个示例中)?
如果解释代码确实用单一引用替换字符串字面量,那么如果相同的字面量出现在多个地方,这种情况是否仍然适用:
public void stringPrinter(){
for(int i=0;i<5;i++){
System.out.println("foo"); // first occurence
System.out.println("foo"); // second occurence
}
}