この記事では主に Java の String StringBuilder と StringBuffer の詳細な説明と使用例を紹介します。必要な方は参考にしてください。
Android/Java 開発では、文字列を処理するためによく使用される 3 つのクラスがあります: String 、 StringBuilder 、 StringBuffer 。 。
それらの類似点と相違点:
1) これらはすべて最終クラスであり、継承は許可されません。
2) StringBuffer と StringBuilder の長さは可変です。 3) StringBuffer はスレッド セーフですが、StringBuilder はスレッド セーフではありません。
String VS StringBuffer
String 型と StringBuffer の主なパフォーマンスの違い: String は不変オブジェクトであるため、String 型が変更されるたびに、新しい String オブジェクトが生成され、ポインタは新しい String オブジェクトを指すため、頻繁に内容を変更する文字列には String を使用しないことをお勧めします。オブジェクトが生成されるたびに、特にメモリ内に参照されていないオブジェクトが多すぎる場合、システムのパフォーマンスに影響を与えるためです。 、JVM の GC が動作し始め、パフォーマンスが低下します。 StringBuffer クラスを使用する場合、新しいオブジェクトを生成したりオブジェクト参照を変更したりするのではなく、毎回 StringBuffer オブジェクト自体に対して操作が実行されます。したがって、ほとんどの場合、特に文字列オブジェクトが頻繁に変更される場合には StringBuffer を使用することをお勧めします。 一部の特殊なケースでは、String オブジェクトの文字列連結は、Java コンパイラーによって実際に StringBuffer オブジェクトの連結にコンパイルされるため、このような場合、String オブジェクトの速度は StringBuffer オブジェクトよりも遅くなりません。例:
String s1 = “This is only a” + “ simple” + “ test”; StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
String s2 = “This is only a”; String s3 = “ simple”; String s4 = “ test”; String s1 = s2 + s3 + s4;
StringBuilder
StringBuilder は 5.0 の新機能です。このクラスは StringBuffer 互換の API を提供しますが、同期は保証されません。このクラスは、文字列バッファーが単一スレッドによって使用される場合 (これが一般的な状況です)、StringBuffer のドロップイン置換として設計されています。ほとんどの実装では StringBuffer よりも高速であるため、可能であればこのクラスを優先することをお勧めします。どちらの方法も基本的には同じです。使用方法
1) 基本原則: 少量のデータを操作したい場合は String を使用し、単一のスレッドで大量のデータを操作したい場合は StringBuilder を使用します。複数のスレッドで大量のデータを処理する場合は、StringBuffer を使用します。String result = ""; for (String s : hugeArray) { result = result + s; } // 使用StringBuilder StringBuilder sb = new StringBuilder(); for (String s : hugeArray) { sb.append(s); } String result = sb.toString();