字符串参考谜语

CSh*_*per -2 c# string reference

我遇到过以下代码谜语:

string a = "S1";
string b = "S2";
a = a+b;
Run Code Online (Sandbox Code Playgroud)

在此之后会留在内存中的是什么:

  1. "S1S2","S2"
  2. "S1","S1S2"
  3. "S1","S2","S1S2"

你有什么意见?为什么,在我看来(c)

  • 字符串指向 "S1S2"
  • 字符串b指向 "S2"
  • 并且"S1"即使在更换pointer/reference字符串a 之后也在后台

Mar*_*zek 5

我认为c是正确的答案,但其原因与你的不符.

您必须了解实习池:

公共语言运行库自动维护一个名为intern pool的表,该表包含程序中声明的每个唯一文字字符串常量的单个实例,以及通过调用Intern 方法以编程方式添加的任何唯一String实例.

String.IsInterned 方法

这就是为什么这两个S1S2将是即使他们没有提到实习生池内.

为什么S1S2在记忆中会非常明显 - a指出这一点string.