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

本文关键字:引用类型 字符串 类型 为什么 | 更新日期: 2023-09-27 18:05:39

可能重复:
在C#中,为什么String是一个行为类似于值类型的引用类型?

我知道字符串是一种引用类型,因为字符串可能很大,堆栈只有1mb。但在编程时,我看到它的行为就像值类型例如

string func_name(string streg)
{    
streg="hello";
return streg; 
}
-------------
string str="hi";
str= func_name(str);

现在str得到值hello?

为什么会这样?它和这里的值类型完全一样。

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

因为已经决定string类型将是不可变的,但字符串仍然可以很大。

你可以在这里阅读原因:

为什么.NET字符串是不可变的?

还有一个和你类似的问题:

在C#中,为什么String是一个行为类似于值类型的引用类型?

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

以为例

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

尽管第二行看起来像是我们在修改它的内容,但它不是

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

类型的变量分配一个新的引用

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

给出了一个很好的解释