字串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 比較時可以忽略...