先看一段代码:
private void Button1_Click(object sender, System.EventArgs e)
{
string[] str=new string[]{"aaa","aaa"};
string test="aaa";
SetValue(str,test);
for(int i=0;i<str.Length;i++)
Response.Write(str[i]);
Response.Write(test);
} private void SetValue(string[] str,string test)
{
str[0]="bbb";
str[1]="bbb";
test="bbb";
}结果是:bbbbbbaaa
既然string和string[]都是引用,那通过函数参数传得应该都是引用的值,为什么string[] 变量原来的值变化,string变量的原来值没有变。
private void Button1_Click(object sender, System.EventArgs e)
{
string[] str=new string[]{"aaa","aaa"};
string test="aaa";
SetValue(str,test);
for(int i=0;i<str.Length;i++)
Response.Write(str[i]);
Response.Write(test);
} private void SetValue(string[] str,string test)
{
str[0]="bbb";
str[1]="bbb";
test="bbb";
}结果是:bbbbbbaaa
既然string和string[]都是引用,那通过函数参数传得应该都是引用的值,为什么string[] 变量原来的值变化,string变量的原来值没有变。
{
string[] str=new string[]{"aaa","aaa"};
string test="aaa";
SetValue(str,ref test);
for(int i=0;i<str.Length;i++)
Response.Write(str[i]);
Response.Write(test);
} private void SetValue(string[] str,ref string test)
{
str = new string[]{"def","fgj"};
test="bbb";
}
string虽然是引用类型,但test = "bbb";相当于new了一个新的string(理解上)