Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在C#中字符串类型不能用作引用类型_C# - Fatal编程技术网

为什么在C#中字符串类型不能用作引用类型

为什么在C#中字符串类型不能用作引用类型,c#,C#,我在C#控制台应用程序中有以下代码: string a = "1"; string b = a; a = "2"; Console.WriteLine(b); 我听说在C#中,字符串类型用作引用类型,但在上面的代码中,变量b仍然向我显示1,为什么它不向我显示2 因为您正在复制引用。字符串是不可变的,因此更改字符串的唯一方法是将其替换为其他字符串。这就是您使用a=“2”所做的 之后,内存中有两个字符串:“1”和“2”a指向后一个,但

我在C#控制台应用程序中有以下代码:

        string a = "1";
        string b = a;
        a = "2";
        Console.WriteLine(b);

我听说在C#中,字符串类型用作引用类型,但在上面的代码中,变量b仍然向我显示1,为什么它不向我显示2

因为您正在复制引用。字符串是不可变的,因此更改字符串的唯一方法是将其替换为其他字符串。这就是您使用
a=“2”
所做的


之后,内存中有两个字符串:
“1”
“2”
a
指向后一个,但是
b
被分配了一份对
“1”
的引用副本,所以当您打印出
a

时,这就是您得到的结果,Stings是不可变的,工作方式与值类型类似,但不是(在内部它们确实是只读引用类型)。这是一些基本的东西,关于.NET的每个文档都在解释它。此外,字符串不能被继承。这很简单-字符串不能以任何方式更改。实际上,每个似乎改变字符串的函数都会创建一个新的字符串

有一个StringBuilder类可用于操作字符串

有关更多信息:


另请参见:

您确切地说是在哪里听到的?