string对象是引用类型,楼主的代码,其实相当于下面的意思://以下是示意性代码:
string s1 = new string("nihao");
string s2 = s1;
string s2 = new string("33");所以string s2 = "33";是把一个新的string对象赋值给s2了,s1当然不会改变,只不过上面的这种写法太麻烦,所以C#提供了简单的写法,可以写成:string s1="nihao";
string s2=s1;
s2="33";

解决方案 »

  1.   

    那为何数组中的bArr就随着aArr而改变了呢?
      

  2.   

    1.C#里面的String类型不是引用类型,它是不可改变,如果你改变了他的值,那么就会导致再为他分配一次内存(简单的说)具体你可以看《.net框架程序设计》
    2.因为数组是引用类型。
      

  3.   

    因为数组本身是引用类型啊!就好比如果你写一个类class Test{
    public int i;
    }Test t1 = new Test();
    Test t2 = t1;
    t1.i *= 2;这样的话 t1还是等于t2啊,和它里面的int变量没有关系呀。数组也是这样。所有的引用类型里,只有String是比较特殊的,这是因为string的赋值语句其实是new出了一个新的string类例,而不是改变原来对象的值的缘故。@winxieddd(一剑飘香)
    c#里的string就是System.String类型,确实是引用类型。只是因为它的赋值语句的特殊语义,让它看上去像一个值类型。
      

  4.   

    请教:cppTrier(cnblogs.com/hush)在我的印象中,引用类型就像一根线一样:
    aaa----->bbb---->"ccc"
    所以,bbb的值如果变了,而且是用了new ,那么aaa既然引用bbb,为何aaa的值不变?如果说此时的aaa引用的是原来的bbb的话,那么既然现在bbb都重新改头换面了,或者说因为bbb的new,可以说bbb没有了,那么为何aaa还有一个和原来bbb一样的值呢?此时的aaa引用的是谁呢?空气?谢谢
      

  5.   

    所以,bbb的值如果变了,而且是用了new ,那么aaa既然引用bbb,为何aaa的值不变?
    _________________________________________________________________________
    aaa相当于一个指针,存放着对象的首地址,地址指向对象所在的内存空间,bbb也一样
    bbb=new以后,改变了bbb本身的值,实在令一块内存空间新建了一个对象,与原来的bbb不相干,此时aaa仍指向原来bbb的对象,所以没有改变,bbb指向了新对象,所以值改变了如果说此时的aaa引用的是原来的bbb的话,那么既然现在bbb都重新改头换面了,或者说因为bbb的new,可以说bbb没有了
    ——————————————
    原来的bbb还有,并不是没有了,原来bbb的内存空间没有被释放,仅仅是新建了一个对象
    ,那么为何aaa还有一个和原来bbb一样的值呢?此时的aaa引用的是谁呢?空气?
    ——————————————————————————————
    是原来的bbb对象
      

  6.   

    你这个对引用的理解在C++中是成立的。但是在C#这个就不是这样,不是特别语法严谨。你上面的3行,应该看做是:
    string a= new string("abc");
    string b = new string(a);
    a= new string("def");这样就可以看出来b不会改变了。那为什么其他的对象类型就必须new了呢?因为:           这个是编译器规定的,属于特例。
      

  7.   

    @fengyun14(along)
    你对引用类型的理解有问题,引用类型并不是像线一样穿在一起的。在你那个例子里,不仅bbb变了aaa会跟着改变,aaa变了bbb也会跟着改变,所以其实是aaa和bbb像两根针一样指着同一块内存地址:aaa----> "ccc" <----bbb如果我们通过aaa改变"ccc"的内容,再用bbb读出它所指的内容,当然也会改变,反之亦然。 然而对于string来说有点特殊。如果我们写bbb= "ddd",这个时候并不是把原来"ccc"的内容,改成"ddd",而是申请了一块新的内存,放入"ddd",然后让bbb指向它,所以这个时候内存里就变成这样:aaa--->"ccc"  bbb--->"ddd"所以aaa和bbb就不同了,这样说你明白了吗?
      

  8.   

    本来明白了,现在大家越说,我又越糊涂了。!照:cppTrier(cnblogs.com/hush) 说:
    aaa该为"ccc"了,同为引用类型,那么数组情况下,为何bbb会跟着aaa的改变而改变呢?
      

  9.   

    FT 我说了string是特殊的,和其它引用类型不同!因为生成了一个新的对象。如果是数组的情况那么:aaa------>"1"<--------bbbbbb.i = 2;之后 就变成:aaa----->"2"<--------bbb当然会一起变