黑马程序员技术交流社区
标题:
下面的程序执行结果是什么?
[打印本页]
作者:
guobin_lu
时间:
2013-4-1 10:37
标题:
下面的程序执行结果是什么?
本帖最后由 guobin_lu 于 2013-4-1 10:39 编辑
class Person
{
public int Age { get; set; }
}
int i1 = 20;
int i2 = i1;
i1++;
Console.WriteLine(i2);
Person p1 = new Person();
p1.Age = 20;
Person p2 = p1;
p1.Age++;
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