不理解引用类型和值类型区别 的程序员将会给代码引入 诡异的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