[Java]StringとStringBuilderとStringBuffer?
5758 ワード
始まる前に
StringBuilderの使用を習得してこそ、アルゴリズムの問題で便利に使用できます.
面接では、StringBuilderとStringの違いが分かれば、うまく答えることができます.
だからこの文章では、StringとStringBuilderの違いを知りたいです.
String
Javaの基本型は全部で8種類あります.
タイプタイプデータ型範囲サイズ論理型booleanfalse、True 1 byte文字型char<00~uffff(0~65535)2 byte整数型byte-128~12717 byte「short-32768~32767 byte」「int-217474833648-21783674」「long-9223372036203668547758088~-9223372036685477580858088~-92372036685477580888 byte実数型float 1」.4E-45 ~ 3.4E384byte''double4.9E-324 ~ 1.8E3088byte
1.4 E−45のようなマークは、Eの前の1.4に10−45を乗じたものである.
-45回は1/10に45回乗算されます.
うん.しかし、基本型Stringはどこにあるのでしょうか.このように聞くことができます.StringはJava基本型ではありません.基本型の特徴を持つ参照型.基本型の特徴は下から見ることができます.
String str = "abc";
元のクラスを使用してオブジェクトを作成するには、次の手順に従います.String str = new String("abc");
しかし、そうしなくても生成でき、基本型の特徴はあるものの、参照型の特殊なやつになってしまう.参照型という言葉がよく分からない場合は、NAVERブログを参照してください.OracleのString公式文書を参照すると、次のことがわかります.
Stringの概要
String abc = "abc";
abc = abc + "asdfasdf";
これを見るとabcは変化が見えますが、文字列を変えることはできませんか?ああ!abcは文字列ではなく文字列変数であることがわかり、「abc」と「asdfasdf」は消えず値を変更できない文字列であることがわかります.
Stringでできること
Stringは、値を変更できない文字列オブジェクトを生成します.もし私がユーザーから文字列を受け取って、操作した値を出力したいなら、どうすればいいですか?
ここで、値は最後の文字の値を削除する必要があると仮定します.
abcd、sdlfsl、pelix、mavenと入力しました.最後の文字を削除するには、substringメソッドを使用して文字列の最後の文字を抽出します.
必要な値はabc、sdlfs、peli、maveであり、abcd、sdlfsl、pelix、mavenもメモリ領域を占めています.
すなわち,文字列の追加,修正,削除などを頻繁に行うアルゴリズムでは,Stringを用いるとスタックメモリが浪費される.
StringBuilder
StringBuilderは、Stringを追加することで、スタックメモリ内の文字列を変更できます.
StringBuilder sb= new StringBuilder("hello");
sb.append(" world");
Stringを使用すると、「hello」と「world」、「hello world」の合計3文字列が生成されますが、StringBuilderで生成して文字列を加えると、結果として1文字列しか生成されません.
メモリの消費量が少ないため、文字列演算を多く行うことができます.
さらにappend、insert、delete演算も提供され、これを実現する.
StringBuffer?
StringBufferはStringBuilderと同じですが、マルチスレッド環境をサポートします.IfUWannaが書いた文章を参照してください.
最大の違いは、同期がないことです.StringBufferは同期キーワードをサポートし、マルチスレッド環境では安全です(thread-safe).Stringは、不変性を有するため、マルチスレッド環境における安定性(thread−safe)も同様であることに注意してください.
StringBuilderは、StringBufferよりもシングルスレッド環境でパフォーマンスが優れているという利点があります.
の最後の部分
整理する
String:文字列演算量が小さく、マルチスレッド環境の場合
StringBuffer:マルチスレッド環境での文字列演算量が大きい
StringBuilder:文字列演算量が多く、単一スレッドでも同期を考慮しなくてもよい
これを機にStringBuilderだけでなくStringBufferとの違いも知り、収穫がありました.ただアルゴリズムの問題で、「Stringはなぜ最後の文字の削除や文字の追加を実現しなかったのか!?面倒くさいなぁ~」という疑問から始まる文章は、収穫が多いようです.
観客の皆さんにもたくさんもらえたらいいなと思います
リファレンス
String公式文書
参照タイプと参照変数(Reference Variable)-異機種間
[Ava]String、StringBuffer、StringBuilder差異およびメリットとデメリット-IfUWanna
Reference
この問題について([Java]StringとStringBuilderとStringBuffer?), 我々は、より多くの情報をここで見つけました https://velog.io/@robolab1902/Java-String-그리고-StringBuilderテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol