0

让我们面对以下代码:

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 针对字符串运行优化,是否有可能丢失空字符之后的部分?

string Waaaa = "This is not \0a long string!";
4

1 回答 1

3

.NET 中的字符串本质上是字符数组 - char[](其中char是 UTF-16 字符的表示形式)。它们不是 C 字符串 - 它们不是以 null 结尾的。

您看到的是字符串实习的结果- 任何字符串文字都将被实习(并且编译器足够聪明,知道将连接的字符串转换为单个文字)。

您的Waaaa变量将与您发布的完全相同 - 中间有一个空字符。

于 2013-02-23T13:25:59.977 回答