尽管以前确实 a String
created withsubString()
具有相同的支持char[]
(可能是为了节省复制的空间和时间),但自 Java 7 Update 6 以来不再如此,因为这种共享char[]
有其内存开销。如果加载(大)字符串,采用小子字符串并丢弃大字符串,则尤其存在这种开销。如果小字符串保留很长时间,这可能会导致大量不需要的内存使用。
无论如何,在当前版本(Java 7 Update 21)中,使用原始字符串的subString()
调用构造函数,然后构造函数从 char 数组中复制指定范围:String(char value[], int offset, int count)
char[]
public String(char value[], int offset, int count) {
if (offset < 0) {
throw new StringIndexOutOfBoundsException(offset);
}
if (count < 0) {
throw new StringIndexOutOfBoundsException(count);
}
// Note: offset or count might be near -1>>>1.
if (offset > value.length - count) {
throw new StringIndexOutOfBoundsException(offset + count);
}
this.value = Arrays.copyOfRange(value, offset, offset+count);
}