StringBuffer的解讀(一)

2021-09-19 17:52:35 字數 1241 閱讀 8068

所有的源**都是jdk1.8.0_202。

@override

tostringcache = null;

return this;

}

if (str == null)

int len = str.length();

ensurecapacityinternal(count + len);

str.getchars(0, len, value, count);

count += len;

return this;}

int c = count;

ensurecapacityinternal(c + 4);

final char value = this.value;

value[c++] = 'n';

value[c++] = 'u';

value[c++] = 'l';

value[c++] = 'l';

count = c;

return this;}

其中ensurecapacityinternal方法,**如下:

private void ensurecapacityinternal(int minimumcapacity) 

}

其中newcapacity方法,**如下:

private int newcapacity(int mincapacity) 

return (newcapacity <= 0 || max_array_size - newcapacity < 0)

? hugecapacity(mincapacity)

: newcapacity;

}

我們再看看hugecapacity是搞什麼的,**如下:

private int hugecapacity(int mincapacity) 

return (mincapacity > max_array_size)

? mincapacity : max_array_size;

}

**差不多了,總結一下:

如果不是null,原本剩餘容量能接納新的string,呼叫string.getchars()方法將新的字串加進去,裡面各種邊界檢查之後,呼叫的是system.arraycopy()方法,這是乙個native的方法,依賴於底層的實現。

String和StringBuffer的區別?

對於這個問題,網路上已經有較多的解答,大多數都是說string 和stringbuffer 它們可以儲存和操作字串,即包含多個字元的字元資料。這個 string 類提供了數值不可改變的字串。而這個 stringbuffer 類提供的字串可以進行修改。當你知道字元資料要改變的時候你就可以使用 stri...

String和StringBuffer的區別

string和stringbuffer的區別 2008 04 10 11 08 string與stringbuffer的區別 稍微延伸說來 public class else 列印的結果是 乙個記憶體空間。這裡 的意義是兩個運算元是否指向同乙個物件。可見s2在不用new建立的情況下會自動檢索到具有相...

String和StringBuffer的區別

string與stringbuffer的區別 稍微延伸說來 public class else 列印的結果是 乙個記憶體空間。這裡 的意義是兩個運算元是否指向同乙個物件。可見s2在不用new建立的情況下會自動檢索到具有相同內容的記憶體空間中共享,那麼既然s1和s2共享了同乙個物件,再看下面的 pub...