好腦子不如爛筆頭,總是記不住,記下來吧
依然 搬運 地址: http://blog.csdn.net/qq_28187979/article/details/76607253
-----------------------------------------------------------------------------------------------------------------------
最近對這幾個傻傻分不清楚,在網上搜集了一些資料,現在總結一下。
string是基本類型,第一條語句,實際上是創建一個名為s1的string類型的對象,系統為s1分配足夠的內存來保存s1中的數據。第二條語句,並不是在s1所指向的地址內添加字符串“ceshi”,而是創建一個新的字符串實例,給它分配足夠的內存,並將“test”放入,將“ceshi”添加進去,然后更新存貯在s1變量中的內存地址,使s1指向新的字符串對象,舊字符串對象將被銷毀。也就是說,每次對string類型的添加或刪除操作,都會創建一個新的字符串對象,銷毀舊的字符串對象。如果頻繁的進行字符串操作,就會影響系統性能。這也是為什么說,string是不可改變對象。所以,如果需要頻繁的修改字符串,建議使用stringBuffer或stringBuilder。
string s1 = "test";
s1 += "ceshi";
stringBuilder和string的初始化,string初始化時,系統會為其分配足夠的內存來容納其所定義的字符串文本,但是stringBuilder有許多構造函數來初始化當前實例的初始大小以及可存儲的最大字符數,在使用時,最好將容量設置為字符串最大長度,確保stringBuilder不需要重新分配內存,如果字符的數量超過設置的最大容量,.net運行庫將自動分配內存並翻倍。也就是說,stringBuilder可以顯式的設置分配內存的大小,而string只能根據初始化字符串的大小由系統來分配足夠的內存。
在上述情況中,stringBuffer和stringBuilder是一樣的,后者速度比前者快,但是前者是線程安全的,適合在多線程下使用,后者是線程非安全的,比較適合在單線程下使用。
