Java中的StringBuilder類解析
基本介紹
1)一個可變的字符序列。此類提供一個與StringBuffer兼容的API,但不保證同步(StringBuilder不是線程安全)。該類被設計用作StringBuffer的一個簡易替換,用在字符串緩沖區(qū)被單線程使用的時候。如果可能,優(yōu)先采用該類,因為在大多數實現中,String Builder比StringBuffer要快;
2)在StringBuilder上的主要操作是append()和insert()方法,可重載這些方法,以接受任意類型的數據。
StringBuilder常用方法
與StringBuffer相同,參考StringBuffer類。
1)StringBuilder是final,無法被繼承;
2)繼承了AbstractStringBuilder類,屬性char[] value,內容存放到value中
3)實現了Serializable接口,序列化(可以保存類型和數據本身)。
package com.pero.stringbuilder_;
/**
* @author Pero
* @version 1.0
*/
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();
}
}String、StringBuffer和StringBuilder的比較
1)StringBuilder和StringBuffer非常類似,均代表可變的字符序列,而且方法也一樣
2)String:不可變字符序列,效率低,但復用率高(常量池中的字符串可以被指向多個對象)
3)StringBuffer:可變字符序列,效率高(增刪)、線程安全(幾乎所有方法都加了synchronized關鍵字)
4)StringBuilder:可變字符序列,效率最高,但是線程不安全
5)String的使用注意事項:
String s = "a";? //常見一個字符串 s += "b";? //實際上原來的"a"字符串已經被丟棄,產生了一個新的字符串 s + "b"(也就是"ab")
如果多次執(zhí)行這些改變字符串內容的操作,會導致大量的副本字符串對象存留在內存中,降低效率。
如果這樣的操作放到循環(huán)中,會極大影響程序的性能=>結論:如果需要對String做大量修改,不要使用Sting類,建議使用StringBuffer和StringBuilder(單線程情況下)類。
package com.pero.stringbuilder_;
/**
* @author Pero
* @version 1.0
*/
public class StringBuilder02 {
public static void main(String[] args) {
String text = "";
long startTime = 0L;
long endTime = 0L;
StringBuffer stringBuffer = new StringBuffer("");
StringBuilder stringBuilder = new StringBuilder("");
//測試StringBuffer的運行效率
startTime = System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
stringBuffer.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer的執(zhí)行時間:"+(endTime-startTime));
//測試StringBuilder的運行效率
startTime = System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
stringBuilder.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder的執(zhí)行時間:"+(endTime-startTime));
//測試String的運行效率
startTime = System.currentTimeMillis();
for (int i=0; i < 20000;i++){
text = text + i;
}
endTime = System.currentTimeMillis();
System.out.println("String的執(zhí)行時間:"+(endTime-startTime));
}
}使用原則:
1.如果字符串存在大量的修改操作,一般使用StringBuffer或者StringBuilder;
2.如果字符串存在大量的修改操作,并在單線程的情況,使用StringBuilder;
3.如果字符串存在大量的修改操作,并在多線程的情況,使用StringBuffer;
4.如果我們字符串很少修改,被多個對象引用,使用String,比如配置信息等。
StringBuilder的方法使用和StringBuffer一樣。
到此這篇關于Java中的StringBuilder類解析的文章就介紹到這了,更多相關Java的StringBuilder類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java詳解ScriptEngine接口動態(tài)執(zhí)行JS腳本
ScriptEngine是基本接口,其方法必須在本規(guī)范的每個實現中完全起作用。這些方法提供基本腳本功能。 寫入這個簡單接口的應用程序可以在每個實現中進行最少的修改。 它包括執(zhí)行腳本的方法,以及設置和獲取值的方法2022-08-08
SpringBoot集成Eclipse Mosquitto的實現示例
本文主要介紹了SpringBoot集成Eclipse Mosquitto的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-08-08

