看了视频之后才明白这两者之间的区别,大家看一下下面的代码
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变量的值被改变了)
|