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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xwh 中级黑马   /  2012-9-12 13:31  /  1340 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看了视频之后才明白这两者之间的区别,大家看一下下面的代码
int i=10;
int j=i;
i++;
console.WriteLine(j);//输出10

Person p1=new Person(10);
Person p2=p1;
p1.Age++;
console.WriteLine(p2.Age);//输出11
IncAge(p2);
console.WriteLine(p2.Age);//输出12 传递给函数也是引用传递

static void InsAge(Person p)
{
p.Age++;
}
值传递:传的是对象的值拷贝。(即函数内参数对象是调用时传递对象的栈中对象的拷贝。)
引用传递:传的是栈中对象的地址。(即函数内参数对象与调用时传递对象完全是同一栈中对象。)

怎么理解呢,大家看看下面是我网上找到的别人的很通俗的举例说法
通俗例子:

假如我有100¥(外部s变量),现在我给你100¥(传递s变量),但是我不是直接给你,而是把我手里的100复制一下,然后给你100(传递的方式:值传递),你去买东西后,还剩40(ChangeValue(string s)函数的功能),但是我的100还是没变(外部s变量的值没变化)。


再来,我有100¥,在钱包里放着(外部s变量)。我把放钱包的地方告诉你,你直接去钱包里面拿100¥(传递方式:引用传递,就是传内存地址),你去买东西后,还剩40,然后你把剩余的钱放回钱包(ChangeValue(ref string s)函数的功能),我的钱也只有40¥了(外部s变量的值被改变了)

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

2 个回复

倒序浏览
将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
回复 使用道具 举报
许庭洲 发表于 2012-9-12 14:18
将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复 ...

还是你说的简单明了啊 :D
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马