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

本文关键字:string 构造函数 调用 像这样 字符串 赋值 文字 | 更新日期: 2023-09-27 18:27:52

出于好奇,如果我调用:

 string txt = "text"; 

它会在幕后这样称呼吗?

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

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

string txt1 = "text"; 

从中间池加载字符串"text",并将其作为引用存储在txt1变量中。

例如,如果你有

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

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

字符串构造函数创建一个新的非内部字符串对象。

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

所以ReferenceEquals(txt1, txt4) == false

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

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

ldstr "text"
stloc.0

我对此表示怀疑-为什么会是

但是为什么不亲自查找,运行ildasm并查看生成了什么代码