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,因为它们是同一个变量.请注意,变量的类型不必是引用类型.
该行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)
| 归档时间: |
|
| 查看次数: |
4918 次 |
| 最近记录: |