黑马程序员技术交流社区
标题:
值传递和引用传递的区别
[打印本页]
作者:
xwh
时间:
2012-9-12 13:31
标题:
值传递和引用传递的区别
看了视频之后才明白这两者之间的区别,大家看一下下面的代码
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变量的值被改变了)
作者:
许庭洲
时间:
2012-9-12 14:18
将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
作者:
xwh
时间:
2012-9-12 14:26
许庭洲 发表于 2012-9-12 14:18
将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复 ...
还是你说的简单明了啊 :D
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2