小编典典
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
}
关于串联,在创建新的String时,JVM使用StringBuilder,即:
s = new StringBuilder(s).append("5").toString();
toString()对于一个StringBuilder是:
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是 不是 已经全部小写,它 会 返回一个newString。
鉴于所提供的答案是3,如JonSkeet所建议的,我们可以假定这两个String文字均已在String池中。有关何时将字符串添加到池中的更多信息,请参见有关Java的字符串池的问题。
2020-10-07