C#中String類型的不變性

來源:互聯網
上載者:User

  今天同事問了我一個問題,如下:

static void Main(string[] args)        {            People people1 = new People();            people1.Name = "BeforePeopleChange";            string str = "BeforeStringChange";            ChangeString(str);            ChangePeople(people1);            Console.WriteLine(people1.Name);            Console.WriteLine(str);                        Console.ReadKey();        }        public sealed class People        {            public string Name { get; set; }        }        public static void ChangeString(string str)        {            str = "AfterStringChange";        }        public static void ChangePeople(People model)        {            model.Name = "AfterPeopleChange";        }        

運行結果如下:

問題是String和People都是參考型別,為什麼在另一個方法中修改他們的值,String不變而People變呢。

 

實際上String類型是C#中的基元類型,他是一種特殊的參考型別,是不可變的,英文叫做immutable。所以在ChangeString方法中改變str的值會在託管堆中重新建立一塊記憶體,將修改後的值存在新建立的那塊記憶體中。而People僅僅是普通的參考型別,ChangePeople方法會直接修改people1所引用的那塊記憶體,所以會出現這個問題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.