原創文章,轉載請標註出處:http://www.javashuo.com/article/p-txbqjrlc-gr.htmlhtml
substring(int beginIndex, int endIndex)方法用於截取字符串,返回截取的新字符串。新字符串由當前字符串的第beginIndex到endIndex的字符組成,長度無endIndex-beginIndex。java
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { //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 boundary return new String(offset + beginIndex, endIndex - beginIndex, value);// 關鍵就在這裏傳的value,這個value就是字符數組,新的字符串延用value,只是修改了屬性值 } }
substring方法返回的字符串對象時新建立的,可是底層指向的字符數組並未改變,還指向原字符串對象指向的字符數組,僅僅是使用對象中的三個屬性來限制字符數組的開始位置與長度,展示給咱們的就是截取完的新字符串。數組
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { //JDK 7 public String(char value[], int offset, int count) { //check boundary this.value = Arrays.copyOfRange(value, offset, offset + count);// 關鍵就是這裏的數組拷貝方法,這會建立一個新的底層字符數組 } public String substring(int beginIndex, int endIndex) { //check boundary int subLen = endIndex - beginIndex; return new String(value, beginIndex, subLen); } }
substring方法返回的字符串是新建的,並且底層指向的字符數組也是新的。網絡