提问人:Afaq 提问时间:12/6/2015 更新时间:12/6/2015 访问量:5803
C# 字符串是按值传递还是按引用传递?[复制]
Is C# string passed by value or passed by reference? [duplicate]
问:
namespace Test
{
class Program
{
static void Main(string[] args)
{
A a = new A();
a.MyString = "Metallica ";
PrintA(a);
Console.WriteLine(a.MyString);
string name = "Linkin ";
Print(name);
Console.WriteLine(name);
Console.ReadLine();
}
static void PrintA(A a)
{
a.MyString = a.MyString + "Rocks";
Console.WriteLine(a.MyString);
}
static void Print(string text)
{
text = text + "Park";
Console.WriteLine(text);
}
}
class A
{
public string MyString { get; set; }
}
}
输出:
金属摇滚
金属摇滚
林肯公园
林肯
我的问题是,如果字符串是引用类型(即类),那么为什么在调用方法 Print() 后它不更改变量名称的值,就像引用变量 a 的成员 MyString 一样。
答:
0赞
yazan_ati
12/6/2015
#1
在 .NET 中,String 是一种引用类型。它通过引用传递。但是,当您对字符串值进行更改时,将创建另一个新副本,使原始副本保持不变。这就是为什么它的行为就好像它是按值发送的一样
评论
8赞
Soner Gönül
12/6/2015
不。按值传递与按引用传递以及按值类型与引用类型是完全不同的主题。它们没有关系。
6赞
Greg Beech
12/6/2015
这个答案是错误的。字符串是一种引用类型,但他的引用是通过值传递的。进行更改时也不会复制它,而是创建一个新字符串并将其分配给引用;由于引用是按值传递的,因此更改不会反映给调用方。
下一个:可变借用不一致
评论