Java 開発の面接では、String、StringBuider、StringBuffer の違いについてよく質問されますが、包括的かつ十分に詳しく答えていない人が多いのですが、これらの違いは何でしょうか?
3 つはすべて文字列の操作に使用されます。通常、String は変数の定義に使用され、StringBuilder StringBuffer は通常、文字列の結合やその他の操作に使用されます。しかし実際には、String は文字列を結合するためにも使用できますが、なぜめったに使用されないのでしょうか? まずは 3 つの基礎となるコードから始めましょう。
#String の基礎となるコードは、final で変更された char 配列です。これは、String 変数を定義した後、変数の内容が不変であることを意味します。
#StringBuilder と StringBuffer はどちらも AbstractStringBuilder から継承しており、このクラスの char 配列は継承しません。最終的な変更を使用します。内容は可変です。これは何を意味しますか?
例:
1 2 3 | String s1= "a" ;
String s2 = new String( "b" ) ;
String s3 = s1+s2;
|
ログイン後にコピー
その場合、文字列「ab」が得られます。これは、文字列の最後に不変の文字列がないため、3 つのオブジェクトが作成され、それらはすべてメモリを占有しており、この 3 つのオブジェクトは参照を失ったことがないため、jvm はガベージ コレクションできず、メモリ リソースが大量に浪費されます。これは開発では推奨されませんが、StringBuilder と StringBuffer にはそのような問題はありません。
基盤となるコードを通して、StringBuilder と StringBuffer が長さかどうかを決定していることがわかります。文字列の結合で十分であり、データをカプセル化する新しい配列を作成しますが、元のオブジェクトは参照を放棄してガベージ コレクションを待機するため、メモリの無駄が削減されます。そのため、文字列の結合やその他の操作では、通常、StringBuilder と StringBuffer を使用します。とありますが、両者の実行効率は異なり、StringBuilderの方が実行効率が高いのですが、これはなぜでしょうか?
基盤となるソース コードを見ると、StringBuffer は文字列を結合するときに同期ロックを使用するため、セキュリティが向上しますが、StringBuilder では同期ロックが使用されないことがわかります。同期ロックがかかるので効率が上がります。
ここで、これら 3 つの違いを理解する必要があります。 !
この記事は
Java 入門 列からのものです。ぜひ学習してください。
以上がString、StringBuffer、StringBuilder の違いについての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。