Java の StringBuilder と StringBuffer の違い
このチュートリアルでは、Java の StringBuilder
クラスと StringBuffer
クラスの違いについて説明します。 それでは始めましょう!
Java の StringBuffer
StringBuffer
クラスは、Java で変更可能な文字列データを使用できる手段を提供します。 これらの文字列は、リスクなしで同時に多数のスレッドによって無関係な方法で使用される可能性があります。
構文:
StringBuffer b = new StringBuffer("Shanii");
例:
public class BufferexamplebyZeeshan {
public static void main(String[] args) {
StringBuffer b = new StringBuffer(" Hi! ");
b.append(" Muhammad Zeeshan Here! ");
b.append(" Let's Code ");
System.out.println(b);
}
}
出力:
Hi! Muhammad Zeeshan Here! Let's Code
Java の StringBuilder
この実装にはスレッド セーフがありませんが、StringBuilder
は変更可能な文字列へのアクセスも提供します。 多数のスレッドが同時にそれを利用することはできません。
このクラスはこの追加機能を適用しないため、StringBuffer
よりもはるかに高速です。
構文:
StringBuilder s1 = new StringBuilder("Shani");
例:
public class BuilderexamplebyZeeshan {
public static void main(String[] args) {
StringBuilder s = new StringBuilder(" Hey!");
s.append("I am a Programmer");
System.out.println(s);
}
}
出力:
Hey!I am a Programmer
Java における StringBuilder
と StringBuffer
の違い
以下のステートメントで StringBuilder
と StringBuffer
の違いを見てみましょう。
いいえ。 | StringBuilder |
StringBuffer |
---|---|---|
1 | StringBuilder 関数は同期されていないため、スレッドセーフではありません。 これは、2つの異なるスレッドが StringBuilder クラスのメソッドを同時に呼び出すことができることを示しています。 |
StringBuffer オブジェクトは同期されます。つまり、スレッドセーフです。 これは、StringBuffer のメソッドを 2つの異なるスレッドから同時に呼び出すことができないことを示しています。 |
2 | コンピューターの ヒープ メモリに生成されます。 |
また、heap メモリにも生成されます。 |
3 | Mutable な文字列を提供します。 |
オブジェクトを構築せずに文字列を変更できます。 |
4 | デフォルトの 16 文字を保存できます。 | StringBuilder と同様に、デフォルトで 16 文字を格納できます。 |
5 | 多くのスレッドが同時に動作するのを防ぎながら可変性をサポートするため、それらすべての中で最も高速です。 | 複数のスレッドが同時にアクションを実行できるようにするため、StringBuilder クラスよりも低速です。 |
6 | 連結は append() 関数を使用して行われます。 |
その連結も append() 関数を使用して行われます。 |
StringBuilder
と StringBuffer
を使用した例
StringBuilder は同期されていないため、 StringBuffer よりも高速です。 StringBuilder
と StringBuffer
の両方を比較するための基本的な例を見てみましょう:
public class Main {
public static void main(String[] args) {
int RandomNumber = 5677839;
long time;
StringBuffer s = new StringBuffer();
time = System.currentTimeMillis();
for (int i = RandomNumber; i-- > 0;) {
s.append("");
}
System.out.println(System.currentTimeMillis() - time);
StringBuilder b = new StringBuilder();
time = System.currentTimeMillis();
for (int i = RandomNumber; i > 0; i--) {
b.append("");
}
System.out.println(System.currentTimeMillis() - time);
}
}
出力:
161
17
上記の例は、StringBuffer
の 161
ミリ秒と StringBuilder
の 17
ミリ秒の数値比較を提供します。これは、StringBuilder
がより効率的なオプションであることを明確に示しています。
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn