1. 程式人生 > >C#-string型別是引用型別的證明

C#-string型別是引用型別的證明

2016年,作為實習生在公司,一位前輩問我這樣一個問題:

string型別是引用型別麼?為什麼它的使用方法那麼像值型別?它也沒有new等引用型別的特徵,你如何證明它是引用型別?

很有意思的一個問題,我後來專門以一封郵件作為了回覆。


string 型別 是 引用型別

string型別與stringbuilder型別很像,類似陣列與集合的某些相對屬性。在小型化上string更快速和只讀,大量資料上面stringbuilder才能體現效能上的優勢。

  1. 首先,string型別為什麼不需要用new,誰說不需要的= =!作為object的子型別很顯然是需要new的,String str=new String(new char[]{‘a’,‘b’,‘c’,‘d’}); 完全是沒問題的。string型別是使用範圍和頻率很大的一個基類,都知道它是char字元一個個拼接起來的字串,但是很不方便,所以就簡化為:String str=“abcd”; 至於如何簡化實現的我不甚了了。
  2. string型別是引用,是指向Unicode字元陣列的指標,每一次賦新值都會開闢一塊新的空間(這應該是在大資料量上效能不如stringbuilder的主要原因吧),值型別則只是在原先基礎上進行修改。至於string
    a;string b;b=a;b=“”;的引用問題,因為string型別不同於stringbuilder,不可變的,賦值時候如果記憶體中有相同的值它就會指向這一個,但是如果修改後的結果是新的沒有相同的,那就是一個新的賦值,並不影響原先的引用(這應該是說它具有值型別特徵的原因)。

在這裡插入圖片描述

time:2016-11-9