InB*_*een 6 c# string-interning
我知道什么是字符串实习,以及为什么以下代码的行为方式如下:
var hello = "Hello";
var he_llo = "He" + "llo";
var b = ReferenceEquals(hello, he_llo); //true
Run Code Online (Sandbox Code Playgroud)
要么
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
Run Code Online (Sandbox Code Playgroud)
...或者我以为我做了,因为在我正在研究的一些代码中出现了一个微妙的错误:
var s = "";
var sss = new string(new char[] { });
var b = ReferenceEquals(s, sss); //True!?
Run Code Online (Sandbox Code Playgroud)
编译器如何知道这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.
Run Code Online (Sandbox Code Playgroud)
您还可以使用数组看到相同的结果,null例如:
char[] tempArray = null;
var s = "";
var sss2 = new string(tempArray);
var b = ReferenceEquals(s, sss2); //True!?
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |