A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李后量 中级黑马   /  2012-6-25 15:05  /  2067 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

6 个回复

倒序浏览
C r1 = new C();   你实例化类C  那么,里面定义的 public int Value = 0; 所以r1的值是0;

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

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
C r2 = r1;  //引用传的是地址,由于r2的值是112,并且r1与r2的地址相同,所以程序输出结果一样

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
C r2 = r1; 这句话的意思就是,把r1的引用赋值给r2,也就是说,让r2这个变量指向r1指向的那个对象
就相当于一个人把风筝的线拿给另外一个人一起牵
此后,r2和r1两个变量同时指向相同的一个对象,一个变量改变这个对象,会反映到另一变量上。
r2.Value的值被赋值了,意思是指向的这个共同对象的value变了,那么不管通过那个变量来取这个对象的value值,都是这个改变了的值,r1也不例外。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
C r1 = new C()创建一个 C类型的实例对象 r1  再声明个C类型 r2 变量  r2=r1意思是r2指向r1对象 所以可以理解为他们为同一个对象,所以他们输出的值相同      

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
C r1 = new C()创建一个 C类型的实例对象 r1  ,在定义一个C类型的的实例对象r2,r2指向r1,也就是r1与r2公用一个地址,现在给r2赋值,也就是将这个值放入它指向的地址,所以,r1的值也是这个。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
引用就和指针差不多的道理。指向的直接是地址。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马