先看一段代码:  
  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变量的原来值没有变。

解决方案 »

  1.   

    用你这种方式传参数时,传的是value(其实这里是指针,string[] 和 string同为引用类),改变参数value本身,但不改变其中的内容,改变是传不回去的,跟这个做比较private void Button1_Click(object sender, System.EventArgs e)
    {
      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";
    }
      

  2.   

    SetValue里面改成str = new string[]{"bbb","bbb"};,结果就是aaaaaaaaa了
    string虽然是引用类型,但test = "bbb";相当于new了一个新的string(理解上)
      

  3.   

    string[0]="aaa"  难道没有相当于new了一个新的string的意思??
      

  4.   

    有,但是这是str[0]的改变,str本身的地址未变
      

  5.   

    saucer(思归) 大哥已经说了  都是传值只是这个值是个指针,如果操作指针所指向的对象只能改变指向对象(形参test改变不会影响到实参test的值(指针));而数组不同是因为改变是指向的对象值而不是自己的值(指针)