private  void ModifyObject(string  obj )
        {
            obj = "999";
        }        private void button3_Click(object sender, EventArgs e)
        {
            string str1 = "John";
            ModifyObject(str1);
            Console.WriteLine(str1); //John   
        }
为什么: 在 button3中调用方法ModifyObject(),字符串不是引用类型 吗,为什么在控制台输出时值是John ,而不是999.

解决方案 »

  1.   

    我记得这个问题好多人都在问,
    string 是一个特殊的引用类型,
    基本上可以当作值类型来用
      

  2.   

    因为你没有引用啊void objRef(ref string obj) ...
    objRef(ref str1);
      

  3.   

    按引用传递必须加ref
     private  void ModifyObject(ref string  obj )
            {
                obj = "999";
            }        private void button3_Click(object sender, EventArgs e)
            {
                string str1 = "John";
                ModifyObject(ref str1);
                Console.WriteLine(str1); //John   
            }
      

  4.   

    string进行了特殊的封装,实际上他是引用类型,但是,用起来却是个值类型,反正见多了就好了!
      

  5.   

    上面有答案了要按引用传递对象加ref
      

  6.   

    这确实是一个好问题啊,string是引用类型不假,但是他有一个特点,即每一次赋值都重新分配一块内存;比如string s1="1";
    s1="3";同是一个变量,但是在内存里面却分配了两次内存,这也是为什么大量字符串操作时,建议使用stringbuilder的原因。
      

  7.   

    就是说string对"等号操作=" 进行了重载。
      

  8.   

    ref字符串是特殊的引用类型   = =..