黑马程序员技术交流社区
标题:
关于引用类型的问题
[打印本页]
作者:
王友伟
时间:
2012-5-18 13:21
标题:
关于引用类型的问题
class Program
{
static void Main(string[] args)
{
int[] b = { 1, 2, 3, 4, 5, 6 }; //数组b是引用类型变量
string s = "987654"; //s也是引用类型变量
cstr(s, b);
Console.WriteLine(s); //为何b改变了,而s没有改变
foreach (int b0 in b)
{
Console.Write(b0);
}
Console.WriteLine();
cstr(ref s);
Console.WriteLine(s); //s原本就是引用类型变量为什么非要用ref引用后才能改变,而s改变了与string类型变量不变是不是自相矛盾?
Console.ReadKey();
}
static void cstr(string s,params int[] b)
{
s = "123456";
for(int i=0;i<b.Length;i++)
{
b[i] = i ;
}
}
static void cstr(ref string s)
{
s = "123456";
}
}
s原本就是引用类型变量为什么非要用ref引用后才能改变,而s改变了与string类型变量不变是不是自相矛盾?
作者:
吴淑金
时间:
2012-5-21 18:10
string虽然是引用类型,但他在两种情况下回表现出值类型特征:
1:在函数中传递string(比如函数参数是string型)时,传递的是地址,但却不能修改成员变量,原因是它重新又创建了一个全新的对象,和它想修改的那个成员变量非同一地址,所以看上去像是值类型;
2:比较str1 == str2 ,仅仅是比较了值,而非地址(是MS重写了==运算符所致).
作者:
朱亮辉
时间:
2012-5-21 18:56
方法参数的传递有两种方式,一种是值传递,一种是引用传递,当你将数组当作参数时会以引用的方式传递给方法,所以你在执行方法之后会改变原有的参数,而其他的参数传递只是传递了变量的一个副本,无论你对参数做任何的改变都不会体现在原变量上,ref和out就是将变量以引用的方式传递的,所以当你用ref和out处理参数的时候就改变原有的参数值。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2