字串
C#中的字串可以使用 String 類別,String 類別為字元(Char)集合所組成,因此當要使用字串時,使用String關鍵字並宣告一組字元陣列,
String本身是唯讀的,在第一次宣告時使用引號( " )宣告常值。
char [] value= new char[] { '字','串','為','c','h','a','r','集','合','所','組','合','而','成' };
String news = new string(value);
for (int i = 0; i < news.Length; i++)
{
if (news[i] == '字')
Console.WriteLine("這個字串有:" + news[i]);
}
//出現錯誤,無法指定屬性或索引子,其為唯讀
//news[0] = '不';
Output :
上面範例有使用到運算子 ( + ),字串可以透過 + 來作串接(concatenate),並且 + 運算子會自動協助強制轉型,
以下範例展現,字串串接數值,而不會出現錯誤,因為 + 運算子已經將該值轉換為字串。
string str = "gdf";
int number = 5;
string result = str + number;
Console.WriteLine(result);
Output :
有關String有一個該注意的地方,有關String為不變的,何謂不變的,表示一旦建立則就不可以改變。
這個原理,其實令人很不解,明明宣告的值就可以改變,其實修改String物件內容時,實際上都會再產生一個修改結果的String物件,
也就是說,當字串內容改變時,實際上只是將物件參考指向另一個新的物件,因為垃圾處理機制將會把沒用到的這些String物件清除掉,
因此比較不容易注意到已經宣告許多String物件。
//MSDN:
//物件string是不可變動的,String 物件稱為不變的 (唯讀),因為建立它之後便無法修改它的值。
//看起來好像會修改 String 物件的方法實際上是傳回含有修改的新 String 物件。
//如果有必要修改字串式物件的實際內容。請使用 System.Text.StringBuilder 類別。
//指向同一個字串物件,所以會相等
string str = "test";
string str2 = "test";
Console.WriteLine(str.Equals(str2));
Output :
true
當變數q傳入ToUpper時,實際上是傳入參考(reference),這個參考指向how所在的位置,
傳入ToUpper()1的參考為一個複製的副本,這邊先稱它為s,s只存活於ToUpper()裡,
當離開ToUpper()後,s就被扔掉了。
這邊可以發現,String object只要有變動就會新增一個String object,要避免一直產生String object則可以使用StringBuilder。
使用StringBuilder主要為了避免產生許多String object,並且免去一直重新配置暫存空間的動作,還有減少垃圾回收機制。
string headerText = "Dear jerry:";
string context = "別在砍樹讓後人曬太陽了!";
string footText = "Thanks & Regards,jerry";
string ToHimself = headerText + "\n" + context + "\n" + footText;
Console.WriteLine("String");
Console.WriteLine(ToHimself+"\n");
StringBuilder mail = new StringBuilder();
mail.AppendLine("Dear jerry:");
mail.AppendLine("別在砍樹讓後人曬太陽了!");
mail.AppendLine("Thanks & Regards,jerry");
Console.WriteLine("StringBuilder");
Console.WriteLine(mail.ToString());
Output:
本篇筆記主要紀錄有關String 物件一些小重點,也是經常忽略的地方,而string的方法則分開紀錄。
結語:
字串應該是平常用最兇的物件之一了,寫完這篇文章後對於String的皮毛有一點了解,繼續努力加油!
string 與 stringbuilder 在考試中也常出現,而在字串串接上,以往也沒有使用stringBuilder的習慣,
瞭解String 物件後,才開始習慣使用stringBuilder再串接字串。
如文章有觀念錯誤,麻煩告知,說法或寫法有更佳的作法也請不吝告知,感恩。
註1:在Thinkng in java裡有提到一個小重點,引數為函式的資訊提供者,並非即將被修改的某個事物,讓程式碼更易於撰寫和理解。
如文章有錯誤,煩請告知,新人發帖請多包涵