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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© guobin_lu 中级黑马   /  2013-4-1 10:37  /  1536 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 guobin_lu 于 2013-4-1 10:39 编辑
  1. class Person
  2.     {
  3.         public int Age { get; set; }
  4.     }
  5.             int i1 = 20;
  6.             int i2 = i1;
  7.             i1++;
  8.             Console.WriteLine(i2);

  9.             Person p1 = new Person();
  10.             p1.Age = 20;
  11.             Person p2 = p1;
  12.             p1.Age++;
  13.             Console.WriteLine(p2.Age);
复制代码
为什么是20跟21?引用传递?

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

3 个回复

倒序浏览
int类型是值类型 Person类是引用类型
说直白一点 值类型是放在身上的现金 引用类型就是放在银行的存款
如上面的代码i1直接把相同现金给了i2 所以后面i1怎么变 都不会影响i2
p2可以理解成p1的附属银行卡 所以p1产生变化 p2就会产生变化

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
····视频中老师讲的很详细了
int i1和i2,都是赋值,i1=20,一个值为20的内存空间,i2被赋值了一个20的内存空间
而类的实例化后 ,是改变值的地址,就是概念中说的指针指向了内存变量
p2=p1 就是P2指向了p1指向的变量值的内存空间
所以p1.Age改变,被指向的值发生了改变,所以P2.Age也改变了

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
以下注释说明了原因:

            int i1 = 20;  //int为值类型
            int i2 = i1;  //将i1的值传给i2,i1和i2保存在不同内存位置,值都为20
            i1++;         //i1值改变,不影响i2的值,因此i2还是原来的值20
            Console.WriteLine(i2);

            Person p1 = new Person();  //类属于引用类型
            p1.Age = 20;
            Person p2 = p1;            //将p1的引用传给p2,此时p1、p2指向相同的内存位置
            p1.Age++;                  //改变p1的值,由于p1、p2指向的是相同的内存位置,等于说p2的值也改变了
            Console.WriteLine(p2.Age); //由上注释可知,p2的值也为21

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

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