与其他reference type不同的是,string是immutable( 不可变更)的。也就是说,一个string类的变量a,如果被赋予一个新的值,那么实际上是在heap中新生成一个string对象,然后令a指向新的对象。所以不会影响其他与a相等的reference(比如例子中的b)。

解决方案 »

  1.   

    怎样快速试验??怎样利用command window试验??
      

  2.   

    既然这样string为什么还属于引用类型,有什么特殊意义么??
      

  3.   

    刚才说错了,sorry,string时引用类型。我想c#底层应该是这样实现的:变量a里保存指向"a"的地址,变量b里保存指向a的地址,当要显示b所指向的值会把a所指向的值显示出来,他会自动判断是地址还是数据,这一点在汇编语言里很容易的,当变量b再次被赋值得话,b里保存的是指向新值得地址。
      

  4.   

    建议阅读 .Net Documention 里的 base Types里面的相关文章,你会得到很清晰的答案的
      

  5.   

    string是引用类型是因为其copy操作比较耗时,应尽量减少。
    string str1, str2;
    ...
    str1 = str2; 
    return str1;
    这两种情况下如果string是valuetype,就必须进行string的copy操作,过于耗时,效率不好。
    另外,程序中的大多数string一般只作为常数使用,比如出错信息...,所以将string设成immutable的,可以减少许多内存分配方面的麻烦,况且还有StringBuilder支持带缓冲区分配的字符串处理。