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 が文字列に対して最適化を実行すると、null char の後の部分が失われる可能性がありますか?

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 に答える