.NET架構-string是value還是reference type的詳解

來源:互聯網
上載者:User
  首先看代碼:

           int a = 1;                      int b = a;           a = 2;                      bool valOrRef = b == 2  ;//false;

  可以看出int類型是實值型別,因為b並沒有跟隨a改變。

  再看下面代碼:

            string str11 = "qa";                        string str22 = str11;            str11 = "qaz";                        bool valOrRef2 = str22 == "qaz"; //false

  結果也是false,所以string 也是實值型別 value type。

  再看下面代碼:

            string str1 = "qaz";                        string str2 = "qaz";                        bool refequ = object.ReferenceEquals(str1, str2); //true

   refequ等於true,如果string真的是value type,那麼refequ怎麼可能為true,因為請看下面代碼:

            int a = 1;                        int b = 1;                        bool refequ2 = object.ReferenceEquals(a, b);//false

  int是實值型別,這是確定無疑的,聲明了2個int變數。

  這便自相矛盾了,怎麼解釋,string看著像value type,但是又看著像reference type。

  微軟:string是reference type。那麼如何解釋看著像value type 呢?

  請記住2點:

1)string對象,若值相同,則其引用地址相同。
2)string對象,若值不等,則其引用地址不等。

  分析以上代碼:

            string str11 = "qa";//str11指向了記憶體addressA,資料為qa;            string str22 = str11;//str22也指向記憶體addressA            str11 = "qaz";//str11新指向了記憶體addressB,資料為qaz            bool valOrRef2 = str22 == "qaz"; //false

總結:

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

後記:
  string效率怎麼樣?

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.