亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#中String和StringBuilder的簡介與區別

2019-10-29 19:58:12
字體:
來源:轉載
供稿:網友

簡介區別

String的缺點是每次字符串變量的內容發生了改變時,都必須重新分配內存。你想想,如果創建一個迭代100000次的循環,每次迭代都將一個字符連接到字符串,這樣內存中就會有100000個字符串,每個字符串僅僅與前一個字符串相伴只是有一個字符不同,性能影響是很大的。

StringBuilder通過分配一個緩存,就是一個工作區來解決這些問題,在工作區中隊字符串應用StringBuilder類的相關方法。包括添加,刪除,移除,插入和替換字符等等。執行完之后,將調用ToString方法把工作區中的內容轉換為一個字符串,方便賦給一個字符串變量。這樣StringBuilder會提升一些性能。

String類型對象的特點:

1.它是引用類型,在堆上分配內存
2.運算時會產生一個新的實例
3.String 對象一旦生成不可改變(Immutable)
4.定義相等運算符(== 和 !=)是為了比較 String 對象的值(而不是引用)

在.NET中String是不可改變對象,一旦創建了一個String對象并給它賦值,它就不可能再改變,也就是你不可能改變一個字符串的值。這句活初聽起來似乎有些不可思議,大家也許馬上會想到字符串連接操作,我們不也可以改變字符串嗎?看下面的這段代碼:

public static void Main(string[] args){    string s ="abc";    Console.WriteLine(s); //輸出 abc     s = s +"def";     Console.WriteLine(s); //def     Console.Read(); }

看起來我們似乎已經把s的值從"abc"改為了"abcdef",實際上并沒有改變。string s = "abc";是創建了一個String對象它的值是"abc",s指向了它在內存中的地址,s += "def";是創建了一個新的String對象它的值是"abcdef",s指向了新的內存地址。這時在堆中其實存在著兩個字符串對象,盡管我們只引用了他們中的一個,但字符串"abc"仍然在內存中駐留。

前面說過String是引用類型,如果我們創建很多個相同值的字符串對象,它在內存中的指向地址應該是一樣的。也就是說,當我們創建了字符串對象s,它的值是"abc",當我們再創建一個值為"abc"的字符串對象str時它不會再去分配一塊內存空間,而是直接指向了s在內存中的地址。這樣可以確保內存的有效利用??聪旅娴拇a:

  public static void Main(string[] args)    {      string s = "abc";      Console.WriteLine(s); //輸出 abc        Add(s);  //調用下面方法       Console.WriteLine(s); //輸出 def      Console.Read();    }    public static void Add(string str)    {      str = "def";    }    //改變方法的參數, 使用ref關鍵字,,    public static void Main(string[] args)    {      string s = "abc";      Console.WriteLine(s); // 輸出 abc        Add(ref s);      Console.WriteLine(s); //abcdef      Console.Read();    }    public static void Add(ref string str) {      str = "def";    }

設置StringBuilder容量

StringBuilder對象為動態字符串,可以對其設置好的字符數量進行擴展。另外,還可以設置一個最大長度,這個最大長度稱為該StringBuilder對象的容量(Capacity)。

為StringBuilder設置容量的意義在于,當修改StringBuilder字符串時,當其實際字符長度(即字符串已有的字符數量)未達到其容量之前,StringBuilder不會重新分配空間;當達到容量時,StringBuilder會在原空間的基礎之上,自動不進行設置,StringBuilder默認初始分配16個字符長度。有兩種方式來設置一個StringBuilder對象的容量。

1.使用構造函數

 StringBuilder構造函數可以接受容量參數,例如,下面聲明一個StringBuilder對象sb2,并設置其容量為100。

//使用構造函數 StringBuilder Mysb1=new StringBuilder("Hello",100);

2.使用Capacity讀/寫屬性

 Capacity屬性指定StringBuilder對象的容量,例如下面語句首先一個StringBuilder對象sb3,然后利用Capacity屬性設置其容量為100。

//使用Capacity屬性 StringBuilder Mysb2=new StringBuilder("Hello"); sb3.Capacity=100;

StirngBuilder的常用方法

1:StringBuilder.Append()將內容追加到當前StringBuilder字符串的結尾。

public static void Main(string[] args){   StringBuilder Mysb = new StringBuilder("abc:");    Mysb.Append(" bcd");    Console.WriteLine(Mysb); // 輸出: abc:def  Console.Read();}

2:StringBuilder.AppendFormat()。用一個帶格式文本來代替字符串要傳遞的符號。

static void Main(string[] args)    {      int Mysb1 = 100;      StringBuilder Mysb2 = new StringBuilder("你欠我:");      Mysb2.AppendFormat("{0:C}", Mysb1);      Console.WriteLine(Mysb2); // 輸出:  你欠我:¥100      Console.Read();    }

3:StringBuilder.Insert(int,string)。

將字符串和對象插入到當前StringBuilder字符串的指定位置。使用此方法將一個單詞插入到 StringBuilder 的第六個位置。

static void Main(string[] args)    {      StringBuilder MyStringBuilder = new StringBuilder("Hello World!");      MyStringBuilder.Insert(6, "插入");      Console.WriteLine(MyStringBuilder); //輸出為: Hello 插入World!      Console.Read();}

4:StringBuilder.Remove(p,n)。在當前StringBuilder對象中移除指定的字符,就是說從p位置開始刪除n個字符

static void Main(string[] args)    {      StringBuilder Mysb = new StringBuilder("Hello World!");      Mysb.Remove(2,2);      Console.WriteLine(MyStringBuilder); //輸出為:heo world      Console.Read();}

5:StringBuilder.Replace(a,b)。就是用b替換a指定字符串,a和b都是字符或字符串。  

static void Main(string[] args)    {      string a = "aaa.Baidu.com";      string b = a.Replace('a','w');      Console.WriteLine(b);   // 輸出:www.Baidu.com}

實際上,當我們創建 StringBuilder 對象的時候,.NET 運行庫會為當前的對象在內存中分配一塊緩存區域,用以對字符串操作的預留空間。在使用 StringBuilder 類的時候,最好將容量設置為字符串可能的最大長度,確保 StringBuilder 不需要重復分配內存。如果字符的容量超過設置的最大容量,.NET 運行庫將自動分配內存并翻倍。

對于我們 .NET 程序員而言,StringBuilder 與 String 的不同之處就在于,StringBuilder 可以顯示的設置分配內存的大小,而 String 只能根據你初始化時的字符串的大小由系統分配足夠的內存。

所以,當要對字符串進行頻繁的操作的時候,在 String 和 StringBuilder 之間,我們應該選擇 StringBuilder。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性色av香蕉一区二区| 97成人精品视频在线观看| 欧美久久精品午夜青青大伊人| 欧美国产日韩一区| 日韩大片免费观看视频播放| 国产一区欧美二区三区| 少妇精69xxtheporn| 国产精品久久久久久久一区探花| 91欧美激情另类亚洲| 亚洲欧洲日本专区| 亚洲精品美女在线观看播放| 久久亚洲精品成人| 夜夜嗨av一区二区三区免费区| 国产成人在线精品| 亚洲小视频在线观看| 亚洲视频在线播放| 欧美激情一级欧美精品| 日韩毛片在线看| 久久夜色精品亚洲噜噜国产mv| 亚洲成人精品久久| 久久亚洲精品国产亚洲老地址| 91精品国产色综合| 亚洲第一视频在线观看| 久久精品国产成人精品| 尤物tv国产一区| 日韩美女视频中文字幕| 成人久久精品视频| 亚洲欧美制服另类日韩| 亚洲а∨天堂久久精品9966| 2019中文字幕在线免费观看| 国产精品专区h在线观看| 欧美亚洲成人xxx| 青草青草久热精品视频在线网站| 国产精自产拍久久久久久蜜| 精品女同一区二区三区在线播放| 国产综合在线视频| 亚洲国产日韩欧美在线99| 国产成人精品免高潮费视频| 亚洲图片欧美午夜| 日韩欧美视频一区二区三区| 国产成人综合av| 久久av资源网站| 狠狠色狠狠色综合日日五| 69久久夜色精品国产69乱青草| 久久99久久99精品中文字幕| 国产精品久久久久久超碰| 亚洲欧美日韩视频一区| 成人黄色av网| 欧美精品国产精品日韩精品| 2019最新中文字幕| 欧美日本黄视频| 日韩精品中文在线观看| 日韩亚洲综合在线| 久久免费福利视频| 国产欧美一区二区白浆黑人| 欧美高清视频在线| 欧美性xxxxhd| 欧美国产第二页| 欧美成在线观看| 国内精品久久久久| 亚洲国产精品美女| 色yeye香蕉凹凸一区二区av| 欧亚精品中文字幕| 成人97在线观看视频| 亚洲网站在线看| 久久中文精品视频| 欧美一区二区三区……| 亚洲精品久久久久久下一站| 日韩成人小视频| 国产91色在线播放| 欧美第一黄网免费网站| 日韩欧美一区二区三区| 欧美激情一区二区三区高清视频| 97在线免费观看| 日韩欧美一区视频| 日韩av中文字幕在线| 日韩a**站在线观看| 久久久久久久一区二区| 国产成人福利视频| 在线播放国产一区中文字幕剧情欧美| 国产精品人人做人人爽| 一区二区亚洲精品国产| 性欧美激情精品| 日日摸夜夜添一区| 成人福利视频在线观看| 亚洲成av人片在线观看香蕉| 国产黑人绿帽在线第一区| 欧美电影在线观看网站| 51精品国产黑色丝袜高跟鞋| 欧美亚洲国产日韩2020| 国产福利精品av综合导导航| 两个人的视频www国产精品| 欧美日韩另类在线| 在线播放国产一区二区三区| 亚洲国产欧美一区二区丝袜黑人| 久久亚洲精品成人| 国产原创欧美精品| 亚洲女性裸体视频| 国产成人精品一区二区| 亚洲日本中文字幕| 日韩中文视频免费在线观看| 欧美视频专区一二在线观看| 国产精品久久久精品| 国产成人精品久久二区二区| 亚洲乱码av中文一区二区| 欧美成人午夜激情在线| 在线观看精品自拍私拍| 久久97久久97精品免视看| 国产免费久久av| 成人自拍性视频| 国内精品久久久久| 久久精品国产96久久久香蕉| 欧美视频在线免费| 亚洲人午夜精品免费| 日韩中文视频免费在线观看| 奇米四色中文综合久久| 成人有码视频在线播放| 亚洲人成网站免费播放| 久久久免费电影| 国产免费久久av| 亚洲第一级黄色片| 亚洲国产成人一区| 日韩在线播放一区| 中文字幕亚洲一区在线观看| 国产精品入口尤物| 久久久久久69| 欧美激情精品久久久| 亚洲欧美另类人妖| 午夜欧美不卡精品aaaaa| 国产精品免费电影| 久久综合免费视频影院| 国产精品女主播| 国产精品久久久久国产a级| 国产精品7m视频| 中日韩美女免费视频网址在线观看| 欧美激情va永久在线播放| 爱福利视频一区| 国产成人午夜视频网址| 精品亚洲一区二区三区| 亚洲黄色片网站| 成人免费观看网址| 日韩av中文字幕在线播放| 亚洲欧美另类国产| 秋霞成人午夜鲁丝一区二区三区| 国产精品色婷婷视频| 91免费欧美精品| 91丨九色丨国产在线| 久久综合五月天| 久久精品视频网站| 欧美电影在线免费观看网站| 亚洲性视频网址| 欧美夫妻性生活视频| 亚洲欧洲一区二区三区久久| 亚洲免费精彩视频| 国产精品wwww| 欧美日韩国产中文精品字幕自在自线| 国产精品免费视频久久久| 亚洲视频欧洲视频| 亚洲a区在线视频| 欧美高清一级大片| 精品丝袜一区二区三区| 亚洲欧美精品一区二区| 国产精品久久激情| 九九久久久久久久久激情|