调用方法后,参数都是引用类型,为何结果不同?
class Program
{
static void Main(string[] args)
{
string name = "text";
Change(name);
Person p1 = new Person();
p1.Name = "text";
Change2(p1);
Console.WriteLine("Change={0},Change={1}",name,p1.Name);
Console.Read();
}
static void Change(string name)
{
name = "改变";
}
static void Change2(Person c1)
{
c1.Name = "改变";
}
}
class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
}
//输出值为:
Change=text,Change1=改变
我看到C#图解教程里面都说过:
name和Person 都是引用类型,而在传入方法时,都是进行了值传递
但是同样是引用类型,为什么返回的结果不一样呢?
------解决方案--------------------因为 Change2方法中传递的是Person对象
------解决方案--------------------String 虽然是引用类型 不过是不可变的
对字符串做一些操作 比如大小写的转换 += 实际上是重新创建了一个字符串
这也是为什么在做大量字符串拼接的时候要使用StringBuilder 而不用+=