static void StrChange(StringBuilder str)
        {
            str.Append("2");
        }
        static void Main()
        {
            
            StringBuilder str = new StringBuilder("1");
           
            StrChange(str);
            Console.WriteLine(str);
        }
        //输出 12
        //这个StringBuilder类为什么没有克隆这个方法呢。        static void StrChange(string str)
        {
            str = "2";
        }
        static void Main()
        {
            string str = "1";
            StrChange(str);
            Console.WriteLine(str);
        }
        //输出 1
        //是不是string 当做值类型来用呢。如代码,还有请问一下,.NET 还有没有类似于 string 这样的只读引用类型?

解决方案 »

  1.   

    String.Empty是只读的string类型。
      

  2.   

    貌似 string 本身就是只读的
      

  3.   

    C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。
      

  4.   

    个人认为string是只读的引用类型;
    static void StrChange(string str)
            {
                str = "2";//因为str是只读的,所以给他赋值实际是重新的另一个对象!这个等于2的对象应该 和等于1的不是同一个对象!
            }
            static void Main()
            {
                string str = "1";//str对象
                StrChange(str);
                Console.WriteLine(str);//应该输出1
            }
      

  5.   

    传入函数 StrChange的是str的内存地址,在栈里产生有一个新的变量str指向了新的内存地址“2”,
    而在main中,str的指向的是“1”的内存地址。这个没变啊。
      

  6.   

    哈哈 我面试用的题 
    你看看下面的吧
    1. 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
    2. 值类型存取速度快,引用类型存取速度慢。
    3. 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用
    4. 值类型继承自System.ValueType,引用类型继承自System.Object
    5. 栈的内存分配是自动释放;而堆在.NET中会有GC来释放
    C#中基本数据类型是值类型,结构也是值类型。而数组、类、接口、字符串都是引用类型。
     
    值类型:简单类型、枚举类型和结构类型
    简单类型分为:除字符串外的都是简单类型。有:整型(有符号和无符号数)、浮点(float、double)、字符(char)、高精度小数(decimal)和布尔
    引用类型:类(object、class)、接口(interface)、字符串(string)、数组(int[] string[])和委托(delegate)。
      

  7.   

    http://blog.csdn.net/xianfajushi/archive/2009/11/11/4787050.aspx
      

  8.   

    在StrChange方法内对str进行赋值,只是修改了局部变量str的引用地址,并不会影响Main中的str如果要使str修改能够返回给调用方,应该把参数改成ref str的形式。string 并不是什么“只读引用类型”,没有这种提法。比较特殊的是字符串对象,它们是“不可变的(immutable)”,即字符串对象一旦创建就无法更改。对字符串进行操作的方法实际上返回的是新的字符串对象。
      

  9.   

    string 类型是被值类型鱼肉的引用类型。呵呵。