日期:2014-05-19  浏览次数:20885 次

求助:关于引用类型和值类型:(在线等)
class   MyClass
        {
                public   int   Val;
        }
class   Program
        {
                static   void   Main(string[]   args)
                {
                        MyClass   Myobject   =   new   MyClass();
                        MyClass   Myobject2   =   Myobject;
                        Myobject.Val   =   43;
                        Myobject2.Val   =   Myobject.Val;
                        Console.WriteLine( "{0} ",Myobject.Val);   //43
                        Console.WriteLine( "{0} ",Myobject2.Val);//43
                        Myobject.Val   =   77;                        
                        Console.WriteLine( "{0} ",   Myobject.Val);//77
                        Console.WriteLine( "{0} ",   Myobject2.Val);//77


                        string   s1   =   "abc ";
                        string   s2   =   s1;
                        Console.WriteLine( "{0} ",   s1);//abc
                        Console.WriteLine( "{0} ",   s2);//abc
                        s1   =   "def ";
                        Console.WriteLine( "{0} ",   s1);//def
                        Console.WriteLine( "{0} ",   s2);//abc     ???
                }
        }
string也属于引用类型,为什么s2的结果还是abc而不是def?

------解决方案--------------------
string是引用类型,但是为了保持与以前的编程语言语法的一致性,当 s1 = "def ";时,实际上是新建了一个字符串,所以引用地址发生了变化.java中也是这样处理的。楼主看stringbuilder类会有更深的体会。
------解决方案--------------------
string类是引用类型..
不过每一个字符串都是一个字符串实例,也就是说 "abc "和 "def "都是一个新的字符串实例,当s1指向 "def "的时候,s2还是指向 "abc "的