C# における可変文字列と不変文字列の違いは何ですか?
ベストアンサー1
Mutableとimmutableはそれぞれ「変更できる」と「変更できない」という意味の英単語です。ITの文脈では、これらの単語の意味は同じです。
- 可変文字列は変更可能であり、
- 不変の文字列は変更できません。
これらの単語の意味は C# / .NET でも他のプログラミング言語 / 環境と同じですが、(当然ですが) 型の名前やその他の詳細は異なる場合があります。
記録のために:
String
標準のC# / .Net不変文字列型ですStringBuilder
標準のC# / .Net可変文字列型です
C# として表現された文字列に「変更を加える」にはString
、実際には新しいString
オブジェクトを作成します。元のオブジェクトString
は変更されません...変更不可能だからです。
ほとんどの場合、String
それらについてより簡単に判断できるため、使用する方が適切です。たとえば、他のスレッドが「自分の文字列を変更する」可能性を考慮する必要はありません。
ただし、一連の操作を使用して文字列を構築または変更する必要がある場合は、 を使用する方が効率的な場合がありますStringBuilder
。例としては、多数の文字列フラグメントを連結して大きな文字列を形成する場合が挙げられます。
- これを連結のシーケンスとして実行すると
String
、O(N^2)
文字がコピーされます。ここで、はN
構成要素の文字列の数です。 - を使用すると、文字
StringBuilder
のみがコピーされますO(N)
。
そして最後に、aは不変ではないので文字列ではないと主張する人々のためにStringBuilder
、Microsoftドキュメンテーション次のように説明していますStringBuilder
。
「を表す変更可能な文字列文字数。このクラスは継承できません。"