JDK 6的實現
String(int offset, int count, char value[]) {this.value = value;this.offset = offset;this.count = count;
}public String substring(int beginIndex, int endIndex) {//check boundaryreturn new String(offset + beginIndex, endIndex - beginIndex, value);
}
示例:?
String string = "abcdef";
String subString = string.substring(1, 3);
string = null;
最后雖然將String賦值為null,但是subString仍然引用了最初的string,將不會被垃圾回收?。
在JDK 7之后,String的實現
public String(char value[], int offset, int count) {//check boundarythis.value = Arrays.copyOfRange(value, offset, offset + count);
}public String substring(int beginIndex, int endIndex) {//check boundaryint subLen = endIndex - beginIndex;return new String(value, beginIndex, subLen);
}
Arrays.copyOfRange將會拷貝一份新的數組,不使用之前的數組。就不會發生上面的內存泄露的問題了。?