String、StringBuffer、StringBuilder の違い:
弦 | 文字列バッファ | 文字列ビルダー | |
---|---|---|---|
実行速度 | 最悪 | 第二に | 最高 |
スレッドの安全性 | スレッドの安全性 | スレッドの安全性 | スレッドセーフではありません |
使用するシーン | いくつかの文字列操作 | マルチスレッド環境での多数の操作 | シングルスレッド環境での多数の操作 |
弦:
String の場合、データは定数プールに保存されます。これは、すべての String がデフォルトで定数形式で保存され、final によって変更されるため、スレッド プール内でスレッドセーフであるためです。各 String が作成された後は変更されなくなりますが、その実行速度は最悪になります。
String を作成すると、その情報が定数プールで処理されるため、プログラム内で文字列の連結作業が大量に発生すると、効率が非常に低くなります。
したがって、少量の文字列を操作する場合は、String を直接使用することをお勧めします。
StirngBuffer: (StringBuilder ほど効率的ではありませんが、String よりもはるかに高い)
StringBuffer は StringBuilder よりも効率が比較的低くなりますが、String よりははるかに効率的です。効率が低い理由: StringBuffer はマルチスレッドの状況をより考慮しており、文字列操作を実行するときに synchronize キーワードを使用してメソッドを同期します。
したがって、StringBuffer は、マルチスレッド環境での多数の操作に適しています。
StringBuilder: (スレッドの安全性の問題は考慮せず)
スレッドの安全性と非安全性:
マルチスレッド処理を実行するときに、複数のスレッドがこのオブジェクトに対して同時に動作すると、予期しない結果が発生します。StringBuilder の場合、実行効率は高くなりますが、スレッドアンセーフであるため、同じ StringBuilder オブジェクトをマルチスレッド環境で操作することはお勧めできません。
したがって、StringBuilder は、シングルスレッド環境での多数の文字列操作に適しています。