string和StringBuilder的區別

2021-08-19 18:21:20 字數 2189 閱讀 4255

博主最近做訂餐系統,因為是在成品上進行迭代開發,所以裡面就有很多前人的智慧型和。。神奇之處。然後我就看到了下面這一堆**:

stringbuilder sb = new stringbuilder();

//訂單排到上面

if (flagz)

//。。。+後面n多行

後面還有就不整出來了,這堆**給我看蒙了,先不說好壞,不過做到了整齊。然後還是要回歸正題,說說string和stringbuilder的區別,網上搜尋一番後,我找到了他們的區別:

string在任何語言中都有它的特殊性,在.net中也是如此。它屬於基本資料型別,也是基本資料型別中唯一的引用型別。字串可以宣告為常量,但它卻放在了堆中。

在.net中string是不可改變物件,一旦建立了乙個string物件並給它賦值,它就不可能再改變,也就是你不可能改變乙個字串的值。這句活初聽起來似乎有些不可思議,大家也許馬上會想到字串連線操作,我們不也可以改變字串嗎?看下面的這段**:

public

static

void

main(string args)

//輸出下面的結果:

1234

12345678

看起來我們似乎已經把s的值從」1234」改為了」12345678」,實際上並沒有改變。string s = 「1234」;是建立了乙個string物件它的值是」1234」,s指向了它在記憶體中的位址,s += 「5678」;是建立了乙個新的string物件它的值是」12345678」,s指向了新的記憶體位址。這時在堆中其實存在著兩個字串物件,儘管我們只引用了他們中的乙個,但字串」1234」仍然在記憶體中駐留。

前面說過string是引用型別,如果我們建立很多個相同值的字串物件,它在記憶體中的指向位址應該是一樣的。也就是說,當我們建立了字串物件s,它的值是」1234」,當我們再建立乙個值為」1234」的字串物件str時它不會再去分配一塊記憶體空間,而是直接指向了s在記憶體中的位址。這樣可以確保記憶體的有效利用。看下面的**:

public

static

void

main(string args)

public

static

void

change(string str)

//輸出下面的結果:

1234

1234

做乙個小改動,注意change(ref string s)

public

static

void

main(string args)

public

static

void

change(ref

string str)

//輸出下面的結果:

1234

5678

通過上面的分析可以看出,string型別在做字串的連線操作時,效率是相當低的,並且由於每做乙個連線操作,都會在記憶體中建立乙個新的物件,占用了大量的記憶體空間。這樣就引出stringbuilder物件,stringbuilder物件在做字串連線操作時是在原來的字串上進行修改,改善了效能。這一點我們平時使用中也許都知道,連線操作頻繁的時候建議使用stringbuilder物件。但是這兩者之間的差別到底有多大呢?來做乙個測試:

public

static

void

main(string args)

end = environment.tickcount;

console.writeline(end - start);

// 測試stringbuilder所用的時間

start = environment.tickcount;

for (int i = 0; i < times; i++)

end = environment.tickcount;

console.writeline(end - start);

console.read();

}//輸出下面的結果:

8840

通過上面的分析,可以看出用string來做字串的連線時效率非常低,但並不是所任何情況下都要用stringbuilder,當我們連線很少的字串時可以用string,但當做大量的或頻繁的字串連線操作時,就一定要用stringbuilder。

String和string的區別

msdn中對string的說明 string is an alias for string in the net framework。string是string的別名而已,string是c 中的類,string是framework的類,c string 對映為 framework的 string。如...

String和string的區別

最近老看見有人在論壇上問string和string有什麼區別,答案五花八門差點兒沒讓我背過氣去,乾脆放到blog上來,論壇上就貼位址了 首先,在一般情況下,string和string是一樣的,但是他們也存在如下區別 1 string始終代表 system.string 1.x 或 system.st...

String和string的區別

msdn中對string的說明 string is an alias for string in the net framework。string是string的別名而已,string是c 中的類,string是framework的類,c string對映為framework的string。如果用s...