首先,他是创建了多个对象,他会在原来的基础上截取一段出来形成一个新的String对象,至于创建了多少个对象,你是想知道str指向了多少个新的对象吗?这和你给的最初的字符串str以及key有关。如果你想知道运行这段代码的时候系统中创建了多少个对象,那就太多了,创建新的string的时候,string里面还包括了其他的对象,你也得去创建。其实你如果是认真去理解源代码,这个问题不难理解,string的substring(int)方法最终指向的方法:
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);
}
这个方法在string类中,可以自己试着理解一下 |