String makeStrings() {
String s = "HI"; //String literal
s = s + "5"; //concatenation creates new String object (1)
s = s.substring(0,1); //creates new String object (2)
s = s.toLowerCase(); //creates new String object (3)
return s.toString(); //returns already defined String
}
关于串联,在创建新字符串时,JVM
使用StringBuilder
,即:
s = new StringBuilder(s).append("5").toString();
toString()
对于 aStringBuilder
是:
public String toString() {
return new String(value, 0, count); //so a new String is created
}
substring
除非整个String
被索引,否则创建一个新的 String 对象:
public String substring(int beginIndex, int endIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
if (endIndex > count) {
throw new StringIndexOutOfBoundsException(endIndex);
}
if (beginIndex > endIndex) {
throw new StringIndexOutOfBoundsException(endIndex - beginIndex)
}
return ((beginIndex == 0) && (endIndex == count)) ? this :
new String(offset + beginIndex, endIndex - beginIndex, value);
}
toString()
不创建新字符串:
public String toString()
{
return this;
}
toLowerCase()
是一个相当长的方法,但只要说如果String
不是全小写,它就会返回 a就足够了。new String
鉴于提供的答案是3
,正如 Jon Skeet 建议的那样,我们可以假设两个字符串文字都已经在字符串池中。有关何时将字符串添加到池中的更多信息,请参阅有关 Java 的字符串池的问题。