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()而不是在循环的每次迭代中创建一个字符串.
除非有什么我想念的?
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)
在这种情况下,他们都会指向同一个对象.