在C#中引用另一个字符串

Nou*_*uny 4 c# string value-type reference-type

据我所知,C#中的字符串是引用类型.

因此,在下面的代码中,'a'应该等于"Hi",但它仍然保持其值为"Hello".为什么?

string a = "Hello";
string b = a;
b = "Hi";
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 28

许多答案指出字符串是不可变的; 虽然这是事实,但这与你的问题完全无关.

更重要的是,您误解了引用如何与变量一起工作.引用不是对变量的引用.将引用视为一段字符串.你从这开始:

a----------------------Hello
Run Code Online (Sandbox Code Playgroud)

然后你说"b = a",这意味着将另一段字符串a附加到附加到的相同内容:

a----------------------Hello
                      /
b---------------------
Run Code Online (Sandbox Code Playgroud)

然后你说"现在把b加到嗨"

a----------------------Hello

b----------------------Hi
Run Code Online (Sandbox Code Playgroud)

您正在考虑引用的工作方式如下:

a----------------------Hello
Run Code Online (Sandbox Code Playgroud)

然后我说这b是另一个名字a:

a/b ----------------------Hello
Run Code Online (Sandbox Code Playgroud)

然后我改变b,改变a,因为他们是同一件事的两个名字:

a/b ----------------------Hi
Run Code Online (Sandbox Code Playgroud)

或者您可能认为引用的工作方式如下:

a----------------------Hello
Run Code Online (Sandbox Code Playgroud)

然后我说这b是指a:

b -------------- a ----------------------Hello
Run Code Online (Sandbox Code Playgroud)

然后我改变b,间接改变a:

b -------------- a ----------------------Hi
Run Code Online (Sandbox Code Playgroud)

也就是说,您期望引用变量而不是值.您可以在C#中执行此操作,如下所示:

void M(ref int x)
{
    x = 1;
}
...
int y = 0;
M(ref y);
Run Code Online (Sandbox Code Playgroud)

这意味着"在调用M期间,x是y的另一个名称".对x的更改会更改y,因为它们是同一个变量.请注意,变量的类型不必是引用类型.


shf*_*301 7

该行b = "Hi";更改了哪个字符串b引用. a还是参考"Hello".

string a = "Hello";  // Set a to reference the string "Hello"
string b = a;        // Set b to reference the same string as a
b = "Hi";            // Set b to reference the string "Hi"
Run Code Online (Sandbox Code Playgroud)