为什么字符串表现为值类型,即使它是c#中的引用类型

时间:2011-08-16 14:34:38

标签: c# string value-type reference-type

  

可能重复:
  In C#, why is String a reference type that behaves like a value type?

我知道string是一个引用类型,因为string可能非常大而堆栈只有1 mb。但编程时编程我发现它的行为类似于值类型 例如

string func_name(string streg)

{    
streg="hello";

return streg; 

}

-------------

string str="hi";

str= func_name(str);

现在str获取值hello?

为什么呢?它就像这里的价值类型一样。

3 个答案:

答案 0 :(得分:2)

因为确定string类型将不可变,但字符串仍然可能非常大。

你可以在这里阅读原因:

Why .NET String is immutable?

另一个类似于你的问题:

In C#, why is String a reference type that behaves like a value type?

答案 1 :(得分:0)

这是因为它是一个不可变类型 - 即一旦定义了对象就不能改变它的内容。 Jon Skeet对字符串类型here

的概念给出了很好的解释

答案 2 :(得分:0)

这是因为字符串是不可变的

考虑示例

string a ="Hello"; a=a+"World";

尽管第二行似乎正在修改它的内容,但它不是

CLR将创建一个值为Hello world的新字符串对象,并将此新对象的引用复制回变量a。 类型是不可变的,但变量不是。您始终可以为string

类型的变量分配新引用