让我们面对以下代码:
string a = "This is not a long string!";
string b = "Another string";
b = "This is" + " not a long " + "string" + "!";
Console.WriteLine(object.ReferenceEquals(a, b)); //True !
string c = "This is" + " not a long " + "string" + '!';
Console.WriteLine(object.ReferenceEquals(a, c)); //False
我看到的唯一原因是.NET优化了变量以占用更少的空间。
.NET是否存储零终止[null]或字符串长度的字符串?
我的意思是当我编写以下代码时,如果.NET针对字符串运行优化,可能会丢失null char之后的部分吗?
string Waaaa = "This is not \0a long string!";
答案 0 :(得分:3)
.NET中的字符串本质上是字符数组 - char[]
(其中char
表示UTF-16字符)。它们不是C字符串 - 它们不是空终止的。
你看到的是string interning的结果 - 任何字符串文字都会被实现(并且编译器足够聪明,可以知道将连接字符串转换为单个文字)。
您的Waaaa
变量将与您发布的完全相同 - 中间带有空字符。