我知道使用大多数String的方法将返回一个新的字符串对象,该对象被添加到字符串池中,并且作为参数传递给这些方法的字符串文字也会添加到字符串池中。
例如,下面的代码将创建三个字符串对象,即:“Hello”,“”World!“”和“Hello World!”添加到字符串池中,意味着传递给concat()方法的参数被添加到字符串池中。
我很想知道传递给StringBuilder.append()方法的字符串文字参数和StringBuilder中的任何其他方法是否都添加到字符串池中。
或许我应该问一下,传递给任何其他类中任何其他方法的所有字符串文字参数是否也被添加到字符串池中?
我还想基于java 6添加我知道的这些事实。
String s = "Hello " ;
s = s.concat("World!") ;
答案 0 :(得分:2)
String
个方法(intern()
旁边)都不会填充字符串池。 StringBuilder
没有一种方法可以做到这一点。在将类加载到内容池时添加文字。因此,如果您调用concat(),它将获得一个实例化的常量对象引用。但是,concat没有做任何实习,也没有任何依赖于它实施的内容。
答案 1 :(得分:2)
我很想知道传递给StringBuilder.append()方法的字符串文字参数和StringBuilder中的任何其他方法是否都添加到字符串池中。
或许我应该问一下,传递给任何其他类中任何其他方法的所有字符串文字参数是否也被添加到字符串池中?
所有字符串文字都放入字符串池中。你如何使用文字是无关紧要的。
答案 2 :(得分:1)
来自java 1.7: -
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
int len = value.length;
char buf[] = Arrays.copyOf(value, len + otherLen);
str.getChars(buf, len);
return new String(buf, true);
}
除非您使用 String.intern()或字符串文字,否则您不会将其添加到字符串池