字符串也是静态的:在方法中创建字符串

avg*_*tvs 3 java string static

我知道在String创建a时的编译时,该String将是该特定签名的任何对象使用的字符串.

String s = "foo"; < - 任何其他相同的字符串将只是对此对象的引用.

这适用于在运行时方法期间创建的字符串吗?我有一些代码,其中一个对象包含一段字符串数据.原始代码就像

for(datum :data){
    String a = datum.getD();  //getD is not doing anything but returning a field

    StringBuffer toAppend = new StringBuffer(a).append(stuff).toString();

    someData = someObject.getMethod(a);
    //do stuff

}
Run Code Online (Sandbox Code Playgroud)

由于String已经创建了data,所以最好只调用datum.getD()而不是在循环的每次迭代中创建一个字符串.

除非有什么我想念的?

Mar*_*ers 7

String当实例是编译时常量表达式的结果时,它们将被共享.因此,在下面的示例中a,c将指向同一个实例,但b将是一个不同的实例,即使它们都表示相同的值:

String a = "hello";
String b = hell() + o();
String c = "hell" + "o";

public String hell() {
   return "hell";
}

public String o() {
   return "o";
}
Run Code Online (Sandbox Code Playgroud)

可以显式地实例化String:

String b = (hell() + o()).intern();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,他们都会指向同一个对象.