文字字符串赋值会像这样调用String构造函数吗?

时间:2012-03-14 16:07:47

标签: c# string constructor

出于好奇,如果我打电话:

 string txt = "text"; 

它会在幕后调用吗?

 string txt = new String("text".ToCharArray())?

3 个答案:

答案 0 :(得分:7)

string txt1 = "text"; 

intern pool加载字符串"text",并将其作为参考存储在txt1变量中。

所以,例如,如果你有

string txt2 = "text"; 
string txt3 = "text"; 

然后是ReferenceEquals(txt2, txt3) == true,因为两个变量都引用了实习池中的相同字符串对象。

String Constructor创建一个新的非实习字符串对象。

string txt4 = new String("text".ToCharArray());

所以ReferenceEquals(txt1, txt4) == false

有一个例外:new String(new char[0])返回对实习池中""字符串对象的引用。

答案 1 :(得分:2)

不,不会。此代码将直接转换为IL stloc命令。它基本上将编译为以下

ldstr "text"
stloc.0

答案 2 :(得分:-1)

我对此表示怀疑 - 为什么会这样呢

但为什么不自己寻找,运行ildasm并查看生成的代码