【C#】可変文字列(StringBuilder)と不変文字列(string)の違いを徹底解説
可変文字列(StringBuilder)とは
C#における可変文字列とは、StringBuilderクラスを使用した文字列のことです。StringBuilderを使うと、文字列の文字数を後から自由に拡張したり、内容を書き換えたりすることができます。
通常のstring型は一度生成すると変更できませんが、StringBuilderは内部バッファを直接操作するため、変更のたびにメモリ上へ新しいオブジェクトを生成しません。そのため、文字列の連結や修正を繰り返す処理では、パフォーマンス面で大きなメリットがあります。
StringBuilderの宣言方法:
StringBuilder str = new StringBuilder();
以下は、C#でStringBuilderを扱う具体例です。コンストラクタの第2引数で初期容量を指定し、Replaceメソッドで文字列を置換しています。
サンプルコード
using System;
using System.Text;
public class Program {
public static void Main() {
StringBuilder str = new StringBuilder("Web World!!", 30);
str.Replace("World", "Arena");
Console.WriteLine(str);
}
}実行結果
Web Arena!!
不変文字列(string)とは
一方、C#における不変文字列とは、string型のことです。stringはイミュータブル(不変)なオブジェクトであり、一度作成するとその内容を変更することはできません。これはStringBuilderとは対照的な性質です。
stringに対して連結や置換などの変更操作を行うと、そのたびに新しいメモリ領域が確保され、新しいオブジェクトが生成されます。頻繁に文字列を操作する場合、この特性がパフォーマンス低下の原因になることがあります。
stringの宣言方法:
String str = "tim";
以下は、2つの文字列をString.Compareメソッドで比較する例です。
サンプルコード
using System;
namespace StringApplication {
class StringProg {
static void Main(string[] args) {
string str1 = "Steve";
string str2 = "Ben";
if (String.Compare(str1, str2) == 0) {
Console.WriteLine(str1 + " と " + str2 + " は等しい文字列です。");
} else {
Console.WriteLine(str1 + " と " + str2 + " は等しくない文字列です。");
}
Console.ReadKey();
}
}
}実行結果
Steve と Ben は等しくない文字列です。
両者の違いまとめ
最後に、stringとStringBuilderの主な違いを表に整理します。
| 項目 | string(不変) | StringBuilder(可変) |
|---|---|---|
| 変更可能性 | 不可(変更時は新オブジェクトを生成) | 可(既存オブジェクトを直接変更) |
| メモリの挙動 | 変更のたびに新しいメモリを確保 | 内部バッファを再利用 |
| 適した用途 | 固定文字列や編集回数が少ない場合 | 連結・編集を繰り返す場合 |
用途に応じて両者を使い分けることで、C#プログラムの可読性とパフォーマンスの両方を向上させることができます。
-
C#におけるstringとStringの違いは何ですか?
C#のstringとStringの違いC#プログラミングにおいて、stringとStringはどちらも同じ型を指しますが、その扱いには微妙な違いがあります。Stringは.NET FrameworkのクラスであるSystem.Stringを直接表すものであり、一方、stringはC#言語が用意しているSystem.Stringのエイリアス(別名)です。つまり、両者はコンパイル後にまったく同じものとして扱われます。基本的な使い方の例string str = Welcome!;このように文字列変数を宣言する際は、通常小文字のstringを使用します。使い分けの目安厳密なルールはありませんが、一般的
-
Pythonの文字列(str)とバイト文字列(bytes)の違いをわかりやすく解説
文字列とバイト文字列の基本的な違いPythonにおける文字列(str)は「文字」の並びであり、これは抽象的な概念です。そのため、そのままではディスクに保存することができません。一方、バイト文字列(bytes)は「バイト」の並びであり、実際にディスクへ保存できるデータです。この両者をつなぐのがエンコーディング(符号化方式)です。エンコーディングには非常に多くの種類があり(理論上は無限に存在します)、変換を行う際にはどのエンコーディングが使われているのかを正しく把握しておく必要があります。なぜエンコーディングの指定が重要なのか同じバイト列でも、解釈するエンコーディングが異なれば、まったく別の文字列