string是引用型
是一块内存你可以这样试试
m1="book";
m2=m1;
m2="look";输出m1看看是多少

解决方案 »

  1.   

    同上, m2, m1指向同一 heap 块
      

  2.   

    不是同一块,String类的赋值和Equal函数已经重载了
      

  3.   

    MSDN中说String.Equal()(已重载)和相等运算符(没有重载)都是“确定两个 String 对象是否具有相同的值。”
      

  4.   

    string p1 = "Book1";
    string p2 = p1;if(object.ReferenceEquals(p1, p2))
    System.Diagnostics.Debug.WriteLine("Same reference!");
    else
    System.Diagnostics.Debug.WriteLine("Different reference!");p2 = "Book1";if(object.ReferenceEquals(p1, p2))
    System.Diagnostics.Debug.WriteLine("Same reference!");
    else
    System.Diagnostics.Debug.WriteLine("Different reference!");p2 = "Book" + "1";if(object.ReferenceEquals(p1, p2))
    System.Diagnostics.Debug.WriteLine("Same reference!");
    else
    System.Diagnostics.Debug.WriteLine("Different reference!");string p3 = "1";
    p2 = "Book" + p3;if(object.ReferenceEquals(p1, p2))
    System.Diagnostics.Debug.WriteLine("Same reference!");
    else
    System.Diagnostics.Debug.WriteLine("Different reference!");
    //Output:Same reference!
    Same reference!
    Same reference!
    Different reference!
      

  5.   

    谢谢大家.
    如果m1,m2 是同一块内存的话,那么
    m1 = "exchange"
    那m2和m1是不为同一块内存.
    如果不是当m2 改变时 为字符串"book"开辟的内存空间是否会回收呢.
      

  6.   

    string 是 ref类型
    建立在STACK上指向托管HEAP上的真实string的内容
      

  7.   

    string是特殊的类型,里面的比较,赋值都已经重新定义,在使用上跟一般的数据类型int,long
    一样,赋值会分配新的内存。
      

  8.   

    string m1= "aaa";
    string m2 = m1;outputDebugMsg(Object.ReferenceEquals(m1,m2).ToString()); <<==这里返回Truem1 = "bbb";outputDebugMsg(Object.ReferenceEquals(m1,m2).ToString());<<==这里返回False安装.NET的说明,m2=m1指向的同一块内存,m1="bbb"后,m1指向的是一块新的内存。
    事实上,如果你定义一个string m3="bbb", m3和m1指向的是同一块内存。
      

  9.   

    point to the same memery, the m2=m1 just as point to the handle of m1.but if you chang the m1 after m2=m1,the they will be different!