JDK6和JDK7中的substring 方法

2021-06-28 02:20:13 字數 1394 閱讀 5394

substring(int beginindex, int endindex)方法在jdk6和jdk7中是不同的。明白它們之間的差別可以幫助我們更好的使用這個方法。為了簡單起見,下面使用substring()代替substring(int beginindex, int endindex)。

substring(int beginindex, int endindex)方法返回乙個從beginindex開始到endindex-1結束的字串。

string x = "abcdef";

x = x.substring(1,3);

system.out.println(x);

輸出:

bc
你可能知道x是不可變的,當x被賦予x.substring(1,3)的值時,它像下面這樣指向了乙個新的字串:

然而,這張圖並不完全正確,它示範了在堆中發生了什麼事情。substring()被呼叫時到底發生了什麼在jdk6和jdk7中是不同的。

字串由乙個字元陣列維護。在jdk6中,string類包含3個字段:char value,int offset,int count,它們被用來儲存真實的字元陣列,陣列的第乙個索引,字串中字元個數。

當substring()方法被呼叫時,它會建立乙個新的字串,但字串的值任然指向堆中的同乙個字元陣列。兩個字串之間差別在於它們的count和offset的值。

下面的**很簡單,僅包含解釋這個問題的關鍵點:

//jdk 6

string(int offset, int count, char value)

public string substring(int beginindex, int endindex)

x = x.substring(x, y) + ""
在jdk7中改進了這個方法。在jdk7中,substring()方法在堆中建立了乙個新的陣列。

jdk6和jdk7的區別

substring jdk6 string是通過字元陣列實現的。在jdk 6 中,string類包含三個成員變數 char value,int offset,int count。他們分別用來儲存真正的字元陣列,陣列的第乙個位置索引以及字串中包含的字元個數。當呼叫substring方法的時候,會建立乙...

JDK7和JDK9關於Try Catch的使用

jdk7的新特性 可以在try後邊加乙個 在括號中引入物件,此物件的作用域是整個try 中,以檔案輸入輸出流為例,可以在 中引入檔案輸入流 輸出流,在try中 執行完畢之後,會自動釋放資源,不用再呼叫close釋放資源。格式 try 定義流物件 定義流對.catch 異常類變數 變數名 jdk7寫法...

JDK7和JDK8中HashMap版本有什麼不同?

hashmap底層是陣列,稱為雜湊桶,儲存結構 jdk7是陣列 鍊錶,jdk8 是陣列 鍊錶 紅黑樹。1 鍊錶插入方式的不同 在1.7之前,鍊錶元素的插入採用的是頭插法,也就是說,當有新結點進來時,會在插入在鍊錶的頭部。很明顯,由於不用遍歷鍊錶,這種插入方式的效率是更高的。但是1.8之後,因為當結點...