string a = "aaa";
string b = a;
b = "bbb";
Demo(a, b);
Console.WriteLine("a->" + a);
Console.WriteLine("b->" + b);
//Demo
public static void Demo4(string s1, string s2)
{
s1="88";
s2="99"; 
}
为什么输出的是
a->aaa
b->bbb
而不是
a->88
b->99

解决方案 »

  1.   

    你去看看什么是传值,什么是传址吧..ByVal
    ByRel
      

  2.   

    public static void Demo4(ref string s1, ref string s2)
    {
    s1="88";
    s2="99"; 
    }
      

  3.   

    string是一个特殊的引用类型,这点在java也是一样的
      

  4.   

    public static void Demo4(string s1, string s2)
    你这里都没返回值,就是说还是显示s1,s2原来的的值啦。
      

  5.   

    这个我知道,但是string不是引用类型吗?
      

  6.   

    对于对象为参数时,函数调用的时候实际传递的是参数的地址
    public static void Demo4(string s1, string s2)
    {
    s1="88";
    s2="99"; 
    }
    s1="88";
    s2="99"; 
    在这两个语句之前,Demo4中的引用s1与Main方法中的引用保存的是同一对象的地址,
    但当Demo4中执行s1="88"时,有产生了一个字符串对象并引用保存在Demo4中的s1,而实参s1还是指向原来的字符串对象,对于s2是同样道理的
      

  7.   

    string 是引用类型。参数传递是“值传递”s1 = "88";s1在参数传递时,实际是复制了一份对s1的引用(相当于s1' = s1),方法内部s1 = "88"的时候,这种操作跟new一样。相当于 s1' = "88",原来的s1对"aaa"的引用并没有被改变。
      

  8.   

    string a = "aaa";
    string b = a;
    b = "bbb";
    Demo(ref a, ref b);
    Console.WriteLine("a->" + a);
    Console.WriteLine("b->" + b);
    //Demo
    public static void Demo(ref string s1, ref string s2)
    {
    s1="88";
    s2="99"; 
    }在这个例子中,把所有的四个“ref”改成“out”也是可以的。
      

  9.   

    public static void Demo4(ref string s1, ref string s2)引用就行了
      

  10.   

    对,记住String是特殊的引用类型就可以了.