欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

String與StringBuilder在C#中有什么區(qū)別-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關String與StringBuilder在C#中有什么區(qū)別,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)是專業(yè)的南開網(wǎng)站建設公司,南開接單;提供成都網(wǎng)站制作、成都網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行南開網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

簡介區(qū)別

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

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

String類型對象的特點:

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

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

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

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

前面說過String是引用類型,如果我們創(chuàng)建很多個相同值的字符串對象,它在內存中的指向地址應該是一樣的。也就是說,當我們創(chuàng)建了字符串對象s,它的值是"abc",當我們再創(chuàng)建一個值為"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";
    }
    //改變方法的參數(shù), 使用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對象為動態(tài)字符串,可以對其設置好的字符數(shù)量進行擴展。另外,還可以設置一個大長度,這個大長度稱為該StringBuilder對象的容量(Capacity)。

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

1.使用構造函數(shù)

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

//使用構造函數(shù)
 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
}

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

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

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

以上就是String與StringBuilder在C#中有什么區(qū)別,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)成都網(wǎng)站設計公司行業(yè)資訊頻道。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

文章題目:String與StringBuilder在C#中有什么區(qū)別-創(chuàng)新互聯(lián)
轉載源于:http://aaarwkj.com/article32/ccdosc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航小程序開發(fā)、做網(wǎng)站品牌網(wǎng)站制作、品牌網(wǎng)站設計、云服務器

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
在线亚洲精品一区二区| 精品蜜桃臀91人少妇| 久久国产精品一区av瑜伽| 最美是你免费视频观看| 女同同性av观看免费| 日韩爱视频一区二区| 日本激情人妻一区二区| 人妻中文字幕一区二区三| 免费在线观看成人av| 久草手机福利在线观看| 大片天天看菲色亚洲黄色| 欧美日韩福利视频在线| 久国产亚洲精品久久久极品| 亚洲国产免费一区二区| 中文有码人妻字幕在线| 午夜免费视频观看在线| 亚洲一区二区精品天堂| 日韩中文字幕乱码一区| 丰满人妻视频一二三区| 亚州欧美制服另类国产| 日韩高清亚洲一区二区| 日韩精品在线观看一二三区| 大香蕉欧美日韩在线视频| 欧美黄片高清免费播放| 精品国产一区亚洲二区| 日本av高清视频在线观看| 国产精品国产精品无卡区| 国产成人一区二区三区综合区| 国产亚洲综合另类色专区| 在线视频天堂亚洲天堂| 夜夜草av一区二区三区| 中文字幕人妻日韩在线| 风间由美亚洲一区二区三区| 亚洲国产成人午夜精品| 欧美日韩专区一区二区三区| 全国最大成人免费视频| 国产精品大白屁股视频| 亚洲午夜精品久久久天堂| 亚洲精品丝袜成人偷拍| 蜜臀av首页在线观看| 亚洲激情欧美日韩精品|