C# 文字列と文字列ビルダー

目次

1. string と stringbuilder は参照型ですか、それとも値型ですか?

2: 文字列を使用して文字列を接続します

3.文字列ビルダー

4.StringBuilderの使い方


1. string と stringbuilder は参照型ですか、それとも値型ですか?

MSDN では、String と StringBuilder は両方とも参照型であると公式に述べています。

参照型: 参照はスタック メモリを割り当て、参照型自体のデータはヒープに格納されます。

値の型:関数内で作成、スタックメモリ、クラス内のメンバ変数のヒープ型。

理論的な観点から見ると、String クラスは Object クラスから継承され、StringBuilder クラスは AbstractStringBuilder クラスから継承され、さらに AbstractStringBuilder クラスは Object クラスから継承され、どちらも Object クラスから派生します。String クラスは不変クラスです。割り当てられるのは 1 回だけです。内容が変更されると、新しいオブジェクトが生成されます。新しいオブジェクトが生成されるたびに、システムのパフォーマンスに影響があり、 の効率が低下します。ネットコンパイラ。StringBuilderクラスは変数クラスです。各操作は新しいオブジェクトを生成するのではなく、独自のオブジェクトに対して動作します。コンテンツの増加に応じて占有領域が拡大します。そのため、大量の変更操作を実行する場合、StringBuilderクラスは生成されません。多数の匿名オブジェクトがシステムのパフォーマンスに影響を与えるためです。

2: 文字列を使用して文字列を接続します

たとえば、文字列 string str="my" をインスタンス化する場合、str オブジェクトのメモリ アドレスはヒープ内の my を指します。str+="name" が使用される場合、my の値は変更されませんが、新しいセクションが作成されます。ヒープに割り当てられます。メモリ空間「myname」は str に参照されます。本質は、新しい文字列を作成して str に割り当てることです。ループ内で複数の文字列変更操作を実行すると、大量のガベージ メモリが生成されることを想像してみてください。StringBuilder は、インスタンス化中、または Capacity が十分に拡張されていない場合にのみメモリを割り当てます。

3.文字列ビルダー

StringBuilder は char* a = new char[lenth]; と同等です。

ヒープ メモリの一部は、文字列データを保存するために特別に開かれます。

StringBuilder はオブジェクトの作成時にメモリ サイズを指定できます。

StringBuilder mStringBuilder = new StringBuilder("LittlePreilla",30);

メモリが超過すると、StringBuilder はメモリを自動的に 2 倍にします。

mStringBuilder.Capacity = 10;		//设置内存
mStringBuilder.EnsureCapacity(10);	//检查内存,大于10不变,小于10改为10

4.StringBuilderの使い方

1) スプライシング

mStringBuilder.Append("aaa");
mStringBuilder.AppendFormat("aaa{0:D}",1012);

2)インサート

mStringBuilder.Insert(1,"ddd");		//index下表位置   

3)削除

mStringBuilder.Remove(1,2);		//index下表位置开始,移除几位

4) 交換

mStringBuilder.Replace("aaa","bbb");		

私は個人的に、出力のフォーマットに正規表現を使用することを好みます。これも非常に便利です。

int a = 10;
string str = $"aaa{10}bbbb";
//结果为 aaa10bbbb

おすすめ

転載: blog.csdn.net/qq_57212959/article/details/131576424