String是基本資料型別還是引用資料型別討論

2021-10-09 05:52:39 字數 819 閱讀 5089

兩個string,如果賦值為同乙個值,在記憶體中只有乙個字串存在,兩個引用的位址相同。由此引出string的不變性。

string的不變性

string最為顯著的乙個特點就是它具有恆定不變性:我們一旦建立了乙個string,在managed heap 上為他分配了一塊連續的記憶體空間,我們將不能以任何方式對這個string進行修改使之變長、變短、改變格式。所有對這個string進行各項操作(比如呼叫toupper獲得大寫格式的string)而返回的string,實際上另乙個重新建立的string,其本身並不會產生任何變化。

string 物件稱為不可變的(唯讀),因為一旦建立了該物件,就不能修改該物件的值。有的時候看來似乎修改了,實際是string經過了特殊處理,每次改變值時都會建立乙個新的string物件,變數會指向這個新的物件,而原來的還是指向原來的物件,所以不會改變。這也是string效率低下的原因。

string的不變,並非說string不能改變,而是其值不能改變。

在例子中str1=「ab」,這時在記憶體中就將「ab」存下來,如果再建立字串物件,其值也等於「ab」,str2=「ab」,則並非再重新分配記憶體空間,而是將之前儲存的「ab」的位址賦給str2的引用,這就能印證例子2中的結果。而當str1="abc"其值發生改變時,這時檢查記憶體,發現不存在此字串,則重新分配記憶體空間,儲存「abc」,並將其位址賦給str1,而str2依然指向「ab」的位址。可以印證例子1中的結果。

結論:

string是引用型別,只是編譯器對其做了特殊處理(使其和基本資料型別一樣)。

redis基本資料型別之String

redis一共分為5中基本資料型別 string,hash,list,set,zset string型別是包含很多種型別的特殊型別,並且是二進位制安全的。比如序列化的物件進行儲存,比如一張進行二進位制儲存,比如乙個簡單的字串數值等等。1 set和get方法 設定值set name realvalue...

資料型別 String和基本資料型別之間相互轉換

1 基本資料型別轉string 1 integer型轉換成字元型 string num integer.tostring int n 2 long型轉換成字元型 string num long.tostring long n 3 short型轉換成字元型 string num short.tostr...

String 與 基本資料型別的轉換

1.由基本資料型態轉換成 string string 類別中已經提供了將基本資料型態轉換成 string 的 static 方法 也就是string.valueof 這個引數多載的方法 有下列幾種 string.valueof boolean b 將 boolean 變數 b 轉換成字串 strin...