StringBuilder和String的區別

2021-09-30 11:33:13 字數 3175 閱讀 5283

自己總結,簡而言之,stringbuilder和string的區別在於:

stringbuilder是變長的。

string是定長的。

以下詳細介紹string和stringbuilder的使用:

我們先看乙個例子

string s1 = "orange";

string s2 = "red";

s1 += s2;

system.console.writeline(s1);  // outputs "orangered"

s1 = s1.substring(2, 5);

system.console.writeline(s1);  // outputs "anger"

大家都知道字串物件是「不可變的」,

對字串進行操作的方法實際上返回的是新的字串物件。

在前面的示例中,將 s1 和 s2 的內容連線起來以構成乙個字串時,包含"orange" 和 "red" 的兩個字串均保持不變。+= 運算子會建立乙個包含組合內容的新字串。

結果是:

s1 現在引用乙個完全不同的字串。只包含"orange" 的字串仍然存在,但連線 s1 後將不再被引用。

大量的字串相加的時候就會有很多像s1一樣的不在被引用,從而造成資源的極大浪費.

我們在看看stringbuilder是如何處理這樣的問題.

一、stringbuilder定義

string   物件是不可改變的。每次使用    system.string    類中的方法之一時,都要在記憶體中建立乙個新的字串物件,這就需要為該新物件分配新的空間。在需要對字串執行重複修改的情況下,與建立新的    string    物件相關的系統開銷可能會非常昂貴。如果要修改字串而不建立新的物件,則可以使用 system.text.stringbuilder 類。

例如,當在乙個迴圈中將許多字串連線在一起時,使用    stringbuilder    類可以提公升效能。   

通過用乙個過載的建構函式方法初始化變數,可以建立    stringbuilder   類的新例項,如下例:

例如:stringbuilder    mystringbuilder    =    new    stringbuilder("hello    world!");   

二、設定容量和長度   

1、雖然    stringbuilder    物件是動態物件,允許擴充它所封裝的字串中字元的數量,但是您可以為它可容納的最大字元數指定乙個值。此值稱為該物件的容量,不應將它與當前    stringbuilder    物件容納的字串長度混淆在一起。例如,可以建立    stringbuilder    類的帶有字串「hello」(長度為    5)的乙個新例項,同時可以指定該物件的最大容量為    25。當修改stringbuilder    時,在達到容量之前,它不會為其自己重新分配空間。當達到容量時,將自動分配新的空間且容量翻倍。可以使用過載的建構函式之一來指定    stringbuilder    類的容量。以下**示例指定可以將mystringbuilder    物件擴充到最大    25    個空白。   

例如:stringbuilder    mystringbuilder    =    new    stringbuilder("hello    world!",    25);   

2、另外,可以使用讀/寫    capacity    屬性來設定物件的最大長度。以下**示例使用    capacity    屬性來定義物件的最大長度。   

例如: mystringbuilder.capacity    =    25;   

3、ensurecapacity    方法可用來檢查當前    stringbuilder    的容量。如果容量大於傳遞的值,則不進行任何更改;但是,如果容量小於傳遞的值,則會更改當前的容量以使其與傳遞的值匹配。   

4、 也可以檢視或設定    length    屬性。如果將    length    屬性設定為大於    capacity    屬性的值,則自動將    capacity    屬性更改為與length    屬性相同的值。如果將    length    屬性設定為小於當前    stringbuilder    物件內的字串長度的值,則會縮短該字串。   

三、修改    stringbuilder    字串

例如:

此示例將 hello world! what a beautiful day. 顯示到控制台。

例如:3、stringbuilder.insert    將字串或物件插入到當前    stringbuilder   物件的指定索引處。   

例如:stringbuilder mystringbuilder = new stringbuilder("hello world!");

mystringbuilder.insert(6,"beautiful ");

console.writeline(mystringbuilder);

此示例將 hello beautiful world! 顯示到控制台。  

4、stringbuilder.remove    從當前    stringbuilder    物件中移除指定數量的字元。    

例如:stringbuilder mystringbuilder = new stringbuilder("hello world!");

mystringbuilder.remove(5,7);

console.writeline(mystringbuilder);

此示例將 hello 顯示到控制台。 

5、stringbuilder.replace    替換指定索引處的指定字元。  

例如:stringbuilder mystringbuilder = new stringbuilder("hello world!");

mystringbuilder.replace('!', '?');

console.writeline(mystringbuilder);

此示例將 hello world? 顯示到控制台。

string和StringBuilder的區別

博主最近做訂餐系統,因為是在成品上進行迭代開發,所以裡面就有很多前人的智慧型和。神奇之處。然後我就看到了下面這一堆 stringbuilder sb new stringbuilder 訂單排到上面 if flagz 後面n多行後面還有就不整出來了,這堆 給我看蒙了,先不說好壞,不過做到了整齊。然後...

String和StringBuilder有什麼不同

string類 字串是常量 它們的值在建立後不能更改。字串的底層其實是乙個被final修飾的陣列,不能改變,是常量 private final byte value stringbuilder類字串緩衝區,可以提高字串的操作效率 看成乙個長度可以變化的字串 底層也是乙個陣列,但是沒有被final修飾...

string 和stringBuilder的區別

1.string 物件時恆定不變的,stringbuider物件表示的字串是可變的。stringbuilder是.net提供的動bai態建立string的高效方式,以克服string物件恆定性帶來的效能影響 2.對於簡單的字串連線操作,在效能上stringbuilder並不一定總是優於string。...