不理解引用類型和值類型區別 的程序員將會給代碼引入 詭異的bug和性能問題(也就是咱們編程過程當中所說的「靈異事件」)
---某大神如是說程序員
廢話很少說,先上代碼:編程
class Program { static void Main(string[] args) { //這裏是引用Human類的屬性 不論他們是什麼類型 在這裏都是引用類型 Human man1 = new Human(); //實例化man1並給屬性賦值 man1.name = "Michael"; man1.age = 24; Human man2 = man1; //本質上是把man2的地址指向man1地址指向的堆裏的內容 這裏man2 name 爲michael age爲24 man1.name = "Qiao"; //man1地址堆裏的內容改變了 也就意味着man2所指向的內容也改變了 man1.age = 18; Console.WriteLine("man1:{0}/t{1}",man1.name,man1.age); Console.WriteLine("man2:{0}/t{1}",man2.name,man2.age); //這裏是類中本身的變量 //string是一種特殊的引用類型 改變的是棧中的引用 堆中的數據並未改變 string name = "siki"; string name2 = "taikr"; name2=name; name = "google"; //在這裏至關於 name2=new name2(); 從新又定義了一個字符串 而不是改變原有的堆中的值 //值類型 改變的是實際數值 int age = 24; int age2 = age; age2 = 25; age = 20; Console.WriteLine("name={0},name2={1}",name,name2); Console.WriteLine("age={0},age2={1}", age, age2); Console.ReadKey(); } }
class Human { public string name = "Michael"; public int age = 20; }
man1:Qiao/t18 man2:Qiao/t18 name=google,name2=siki age=20,age2=25