StringBuilder類
一、結構剖析
- 一個可變的字符序列,此類提供一個與 StringBuffer 兼容的 API,但不保證同步(StringBuilder 不是執行緒安全的),該類被設計用作 StringBuffer 的一個簡易替換,用在字串緩沖區被單個執行緒使用的時候,如果可能,建議優先采用該類,因為在大多數實作中,它比 StringBuffer要快,
- 在 StringBuilder 上的主要操作是 append 和 insert 方法,可多載這些方法,以接受任意型別的資料,
//StringBuilder類細節:
public class StringBuilder01 {
public static void main(String[] args) {
//1. StringBuilder 繼承 AbstractStringBuilder 類
//2. 實作了 Serializable 介面,說明StringBuilder物件是可以串行化(物件可以網路傳輸,可以保存檔案)
//3. StringBuilder 是 final類,不能被繼承
//4. StringBuilder 物件字符序列仍然是存放在其父類 AbstractStringBuilder 的 char[] value;
//5. StringBuilder 的方法,沒有做互斥的處理,即沒有synchronized 關鍵字,因此在單執行緒的情況下使用StringBuilder
StringBuilder stringBuilder = new StringBuilder();
}
}
二、StringBuilder常用方法
StringBuilder 和 StringBuffer 均代表可變的字符序列,方法是一樣的,所以使用和StringBuffer一樣,
三、StringBuilder應用
-
String、StringBuffer 和 StringBuilder 的比較
-
StringBuilder 和 StringBuffer 非常類似,均代表可變的字符序列,而且方法也一樣
-
String:不可變字符序列,效率低,但是復用率高,
-
StringBuffer:可變字符序列,效率較高(增刪),執行緒安全,
-
StringBuilder:可變字符序列,效率最高,執行緒不安全,
-
String使用注意說明:
String s = "a";:創建了一個字串s += "b";:實際上原來的 "a" 字串物件已經丟棄了,現在又產生了一個字串 s + "b" (也就是"ab"),如果多次執行這些改變內容的操作,會導致大量副本字串物件留在記憶體中,降低效率,如果這樣的操作放在回圈中,會極大影響程式的性能,結論:如果我們對 String 做大量的修改,不要使用String,
-
-
String、StringBuffer和StringBuilder的效率測驗
效率:StringBuilder > StringBuffer > String
public class StringVsStringBufferVsStringBuilder { public static void main(String[] args) { long startTime = 0L; long endTime = 0L; StringBuffer buffer = new StringBuffer(""); startTime = System.currentTimeMillis(); for (int i = 0; i < 80000; i++) {//StringBuffer buffer.append(String.valueOf(i)); } endTime = System.currentTimeMillis(); System.out.println("StringBuffer的執行時間:" + (endTime - startTime)); StringBuilder builder = new StringBuilder(""); startTime = System.currentTimeMillis(); for (int i = 0; i < 80000; i++) {//StringBuilder builder.append(String.valueOf(i)); } endTime = System.currentTimeMillis(); System.out.println("StringBuiler的執行時間:" + (endTime - startTime)); String text = ""; startTime = System.currentTimeMillis(); for (int i = 0; i < 80000; i++) {//StringBuilder text = text + i; } endTime = System.currentTimeMillis(); System.out.println("String的執行時間:" + (endTime - startTime)); } } //運行結果: //StringBuffer的執行時間:12 //StringBuiler的執行時間:5 //String的執行時間:3695 -
String、StringBuffer和StringBuilder的選擇
使用原則,結論:
- 如果字串存在大量的修改操作,一般使用 StringBuffer 或 StringBuilder
- 如果字串存在大量的修改操作,并且在單執行緒的情況,使用StringBuileder
- 如果字串存在大量的修改操作,并且在多執行緒的情況,使用StringBuffer
- 如果我們字串很少修改,被多個物件參考,使用String,比如配置資訊等
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/542065.html
標籤:其他
下一篇:垃圾回識訓制
