黑马程序员技术交流社区

标题: 下面的程序执行结果是什么? [打印本页]

作者: guobin_lu    时间: 2013-4-1 10:37
标题: 下面的程序执行结果是什么?
本帖最后由 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?引用传递?
作者: HM邱刚权    时间: 2013-4-1 10:56
int类型是值类型 Person类是引用类型
说直白一点 值类型是放在身上的现金 引用类型就是放在银行的存款
如上面的代码i1直接把相同现金给了i2 所以后面i1怎么变 都不会影响i2
p2可以理解成p1的附属银行卡 所以p1产生变化 p2就会产生变化
作者: 张振    时间: 2013-4-1 11:45
····视频中老师讲的很详细了
int i1和i2,都是赋值,i1=20,一个值为20的内存空间,i2被赋值了一个20的内存空间
而类的实例化后 ,是改变值的地址,就是概念中说的指针指向了内存变量
p2=p1 就是P2指向了p1指向的变量值的内存空间
所以p1.Age改变,被指向的值发生了改变,所以P2.Age也改变了
作者: DWC_5101    时间: 2013-4-1 12:57
以下注释说明了原因:

            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




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