可能重复:
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?
为什么呢?它就像这里的价值类型一样。
答案 0 :(得分:2)
因为确定string
类型将不可变,但字符串仍然可能非常大。
你可以在这里阅读原因:
另一个类似于你的问题:
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