繁体   English   中英

字符串实习。编译器如何知道?

[英]String interning. How does the compiler know?

我知道什么是字符串实习,以及为什么以下代码的行为方式如下:

var hello = "Hello";
var he_llo = "He" + "llo";
var b = ReferenceEquals(hello, he_llo); //true

要么

var hello = "Hello";
var h_e_l_l_o = new string(new char[] { 'H', 'e', 'l', 'l', 'o' });
var b = ReferenceEquals(hello, he_llo); //false

...或者我以为我做了,因为在我正在研究的一些代码中出现了一个微妙的错误:

var s = "";
var sss = new string(new char[] { });
var b = ReferenceEquals(s, sss); //True!?

编译器如何知道 sss实际上是一个空字符串?

如果在字符串构造函数中传递空数组或空数组 ,则返回空字符串。

它在参考代码的注释中指定

 // Creates a new string with the characters copied in from ptr. If
 // ptr is null, a 0-length string (like String.Empty) is returned.

你也可以看到与null数组相同的结果:

char[] tempArray = null;
var s = "";
var sss2 = new string(tempArray);
var b = ReferenceEquals(s, sss2); //True!?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM