黑马程序员技术交流社区

标题: 还在纠结于引用类型,求详解 [打印本页]

作者: 李后量    时间: 2012-6-25 15:05
标题: 还在纠结于引用类型,求详解
  1. class Program
  2.     {
  3.         class C
  4.         {
  5.             public int Value = 0;
  6.         }
  7.         static void Main(string[] args)
  8.         {
  9.             int v1 = 0;
  10.             int v2 = v1;
  11.             v2 = 927;
  12.             C r1 = new C();
  13.             C r2 = r1;                //可能就这句话理解错了,哪位给解释下啊
  14.             r2.Value = 112;
  15.             Console.WriteLine("Values:{0},{1}",v1,v2);
  16.             Console.WriteLine("Refs:{0},{1}",r1.Value,r2.Value);
  17.             Console.ReadLine();
  18.         }
  19.     }
复制代码
那个值类型的结果可以理解,但那个引用类型的结果我不是很理解,哪位给解释下呀

33.jpg (3.32 KB, 下载次数: 114)

33.jpg

作者: 平建    时间: 2012-6-25 15:58
C r1 = new C();   你实例化类C  那么,里面定义的 public int Value = 0; 所以r1的值是0;

C r2 = r1;     目前 r1的值是0;你把0赋值给 r2,所以r2=0.
r2.Value = 112;   下面我就不解释了

作者: 许庭洲    时间: 2012-6-25 16:12
C r2 = r1;  //引用传的是地址,由于r2的值是112,并且r1与r2的地址相同,所以程序输出结果一样
作者: 黑马龙超    时间: 2012-6-25 17:38
C r2 = r1; 这句话的意思就是,把r1的引用赋值给r2,也就是说,让r2这个变量指向r1指向的那个对象
就相当于一个人把风筝的线拿给另外一个人一起牵
此后,r2和r1两个变量同时指向相同的一个对象,一个变量改变这个对象,会反映到另一变量上。
r2.Value的值被赋值了,意思是指向的这个共同对象的value变了,那么不管通过那个变量来取这个对象的value值,都是这个改变了的值,r1也不例外。
作者: 朱永恒    时间: 2012-6-25 17:49
C r1 = new C()创建一个 C类型的实例对象 r1  再声明个C类型 r2 变量  r2=r1意思是r2指向r1对象 所以可以理解为他们为同一个对象,所以他们输出的值相同      
作者: 李嫒    时间: 2012-6-25 18:02
C r1 = new C()创建一个 C类型的实例对象 r1  ,在定义一个C类型的的实例对象r2,r2指向r1,也就是r1与r2公用一个地址,现在给r2赋值,也就是将这个值放入它指向的地址,所以,r1的值也是这个。
作者: 黑马-许泽宇    时间: 2012-6-27 12:52
引用就和指针差不多的道理。指向的直接是地址。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2