C 學習筆記 字串類的小結

2021-10-07 12:44:41 字數 1386 閱讀 4939

字串string 類是密封的,被sealed修飾,具有不可變性,還有字串池。

1、不可變性

當乙個字串被宣告和賦值的時候,其變數指向的位址在堆中的位址內容是不可變的,只有在程式結束時,才能被釋放,當然可以通過stringbuilder對字串進行操作。

//以下操作相當於在堆中開闢五塊記憶體位址

//"a""b""c"在堆中的位址如何沒有相應的棧記憶體指向,會一直儲存在堆中,知道程式關閉釋放

string a="a";

string b="b";

string c="c";

a=a+b;//結果:ab

a=a+c;//結果abc

2.字元池 

//s1和s2可以說是兩個相同的物件,它們在棧中的位址不一樣,但是都指向的是"abc"堆中的位址

//s1和s3不是同乙個物件,s3的賦值語句a+b+c相當於在堆中重新開闢了一塊記憶體

string s1="abc";

string s2="abc";

string a="a";

string b="b";

string c="c";

string s3=a+b+c;

在宣告乙個字串變數並賦值的過程中,會先對賦值的內容在字元池中查詢,如果存在,則直接把變數質量這塊記憶體位址,如果不存在則重新開闢一塊記憶體位址儲存賦值的內容 

對於動態字串本身在雜湊表中沒有,通過這種intern可以新增到該雜湊表中,目的為了提高效能。

(1)stringintern(xx),intern 方法使用暫存池來搜尋與str值相等的字串。如果存在這樣的字串,則返回暫存池中它的引用。如果不存在,則問暫存池新增對str的引用,然後返回該引用。

(2)sstring isintemed(xx),此方法在暫存池中查我str。如果已經將str放入暫存池中,則返回對此例項的引用;否則返回 nullnothingnullptrnu引用

3、為什麼要在字串類前加sealed關鍵字修飾?

(1)子類如果要繼承字字串類,可能會對字串類進行修改,對字串的特性可能會改變(改變字串的不可變性)

(2)clr對字串提供 各種特殊的操作方式,如果有很的子類對字串類繼承,clr需要對更多型別提供特殊的操作,會降低效能。

4.字串格式化

在console.writeline()和string.format()可能都需要對字串進行格式化操作

如string.format("今天是,我賺了",system.datetime.now,800)

對字串操作:string.format("今天是,我賺了",system.datetime.now,800)

表示向左對齊,有20個 空格的寬度

,具體操作檢視微軟msdn:復合格式

C字串和C 字串小結

在c中,並沒有字串這個資料型別,而是使用字元陣列來儲存字串。c字串實際上就是乙個以null 0 字元結尾的字元陣列,null字元表示字串的結束。需要注意的是 只有以null字元結尾的字元陣列才是c字串,否則只是一般的c字元陣列。字串的初始化 char a 11 huanying 字串的賦值 strc...

Qt學習筆記 字串類

標準c 提供了兩種字串,一種是c語言風格的以 0 結尾的字元陣列,另一種是字串類string。而qt提供的qstring功能更強大。qstring類儲存16位unicode值,提供了豐富的操作 查詢和轉換等函式。該類還進行使用影視共享 implicit sharing 高效的記憶體分配策略等多方面的...

C 學習筆記 字串

字串 char型別的唯讀陣列 1 常用方法 length 獲得字串中字元的個數 toupper 將字串轉換為大寫 tolower 將字串轉換為小寫 equals 比較兩個字串是否相同,equals string a,stringcomparison.ordinalignorecase 比較時可以忽略...