String、StringBuilder、StringBufferを理解する必要があります
String、StringBuilder、StringBuffer の 3 つのクラスの関係と違いは、Java では常に古典的な問題です
簡単な比較
-
1. String: 文字定数。
- StringBuilder: 文字変数
- StringBuffer: 文字変数
StringBuilder / StringBuffer の 2 つのクラスは変数型であり、どちらも文字列の結合によって生成される中間オブジェクトが多すぎる問題を解決するために提供されたクラスです。 StringBuilder > 削除された StringBuffer にはスレッドセーフな部分があるため、オーバーヘッドが効果的に削減されます。したがって、ほとんどの場合、
StringBuilder が文字列の結合操作の最初の選択肢になります
- 2. 文字列の文字列処理 例 1:
- このような文字列処理を行うとき、多くの人が String 型が変数であると誤解します。 しかし、実際には、JVM がこのコードを処理するプロセスは次のとおりです。まず s オブジェクトを作成し、値「abcd」を割り当てます。次に、コードの 2 行目を処理するときに、別の s オブジェクトを作成し、値「abcdfgh」を割り当てます。 " を追加し、最初のオブジェクト ガベージ コレクションを追加します。
- つまり、最初の s は変更されず、2 番目の s は新しいオブジェクトであることと同等です例 2:
String s = "abcd"; s = s + "fgh";
String str = “This is only a” + “simple” + “test”;
String str = “This is just a simple test”;< /code と同等です。 ><p><strong>例 3:</strong><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>String str2 = "This is only a";
String str3 = "simple";
String str4 = "test";
String str1 = str2 +str3 + str4;</pre><div class="contentsignin">ログイン後にコピー</div></div></p>このコードも例 1 のプロセスに従って処理されます<h1></h1> 3 つの StringBuilder / StringBuffer 構築特性<h3></h3> これら 2 つのオブジェクトの構築プロセスでは、まずデフォルトに従って 1 つを適用します。 size 文字配列 (char[])、デフォルトの容量は 16 文字ですが、それを超える場合は、Arrays.copyOf() を使用して容量を 2 倍の 16、32、64、128... に拡張します。もちろん、これは影響します。オブジェクトは必要に応じてカスタマイズできます <p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>//默认 16 个字符
public StringBuilder() {
super(16);
}
//构造函数定义容量
public StringBuilder(int capacity) {
super(capacity);
}</pre><div class="contentsignin">ログイン後にコピー</div></div></p> 4. 文字列のスプライシング処理における String と StringBuilder の比較<p></p> 文字列のスプライシング操作には StringBuilder が推奨されていることは誰もが知っていますが、常に使用することが推奨されています。文字列連結の代わりにStringBuilder?明らかに違います。 <p></p>例 1: <h3><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>String str = "123";
String str1 = str + "456";
String str2 = new StringBuilder().append(str).append("def").toString();</pre><div class="contentsignin">ログイン後にコピー</div></div></h3><p> この場合、2 つの処理方法の間に効率の差はほとんどありません<code>String str = “This is only a simple test”;
例三:
String str = ""; for (int i = 0; i < 1000; i++) { str += "12345"; } StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < 1000; i++) { stringBuilder.append("12345"); }
这段代码同样会按照例一的过程来处理
三. StringBuilder / StringBuffer 构造特性
这两个对象在构造的过程中,首先按照默认大小申请一个字符数组(char[]), 默认容量为 16 个字符,但如果超出,会使用 Arrays.copyOf() 成倍扩容 16,32,64, 128...,当然这样会影响性能,因此可以在创建对象时按照需要自定义其容量
String str1 = "123" + "456" + "789"; String str2 = new StringBuilder("123").append("456").append("789").toString();
四. String 与 StringBuilder 处理字符串拼接对比
我们都知道,进行字符串拼接操作时推荐使用 StringBuilder,但是是不是什么时候都推荐使用 StringBuilder 来代替 String 进行字符串拼接?显然不是的。
例一:
rrreee在这种情况下,两种处理方式效率差别不大
在 JDK 8 中, String 的字符串拼接操作会被编译器自动转换为 StringBuilder 并调用 append 方法,由于这样的优化方案,使得两个类在这种情况下的处理效率差别不大;而在 JDK 9 中,为了更加统一字符串操作优化,提供了 StringConcatFactory,作为一个统一的入口,更加优化了字符串拼接操作。
例二:
rrreee这种情况下,StringBuilder 更快
在循环中,每执行一次 “+”,都会创建一个 String 对象,因此会有大量对象创建和回收的消耗。
简单来说,在循环中对同一个字符串对象做字符串拼接,优先选择 StringBuilder
例三
rrreee这种情况下,String 更快
我们都知道 String str1 = "123" + "456" + "789";
其实是等同于 String str1 = "123456789";
例3
rrreee🎜🎜この場合、Stringの方が高速です🎜🎜🎜usString str1 = "123" + "456" + "789";
は実際には String str1 = "123456789";
と同等ですが、StringBuilder では append メソッドを複数回呼び出す必要があります。 。 🎜以上がString、StringBuilder、StringBufferを理解する必要がありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の String.valueOf() 関数を使用して基本データ型を文字列に変換する Java 開発で基本データ型を文字列に変換する必要がある場合、一般的な方法は String クラスの valueOf() 関数を使用することです。この関数は、基本データ型のパラメータを受け入れ、対応する文字列表現を返すことができます。この記事では、基本的なデータ型変換に String.valueOf() 関数を使用する方法を検討し、いくつかのコード例を提供します。

char配列をstringに変換する方法:代入によって実現できます {char a[]=" abc d\0efg ";string s=a;} 構文を使用して、char配列にstringに値を直接代入させて実行します変換を完了するためのコード。

stringbuilder をクリアするメソッドは次のとおりです: 1. setLength(0) メソッドを使用して StringBuilder オブジェクトをクリアします; 2. delete(0, length) メソッドを使用して StringBuilder オブジェクトをクリアします; 3. replace(0, length, " ") メソッドで StringBuilder オブジェクトをクリアします; 4. 、 new StringBuilder() を使用して、新しい StringBuilder オブジェクトを再作成します。

文字列内のコンテンツの一部を削除するには、Java の StringBuilder クラスの delete() メソッドを使用します。String クラスは、Java で一般的に使用される文字列処理クラスです。文字列操作によく使用されるメソッドが多数あります。ただし、場合によっては、文字列を頻繁に変更する必要があり、String クラスの不変性により新しい文字列オブジェクトが頻繁に作成されるため、パフォーマンスに影響します。この問題を解決するために、Java は StringBuilder クラスを提供します。

StringBuilder クラスの append() メソッドは String 値を受け取り、それを現在のオブジェクトに追加します。文字列値を StringBuilder オブジェクトに変換します - 文字列値を取得します。 append() メソッドを使用して追加し、文字列を StringBuilder に取得します。例 次の Java プログラムでは、文字列の配列を単一の StringBuilder オブジェクトに変換しています。リアルタイム デモ publicclassStringToStringBuilder{ publicstaticvoidmain(Stringargs[]){&a

Java の String.replace() 関数を使用して文字列内の文字 (文字列) を置換する Java では、文字列は不変オブジェクトです。つまり、文字列オブジェクトが作成されると、その値は変更できません。ただし、文字列内の特定の文字または文字列を置換する必要がある状況が発生する場合があります。現時点では、Java の String クラスの replace() メソッドを使用して文字列置換を実装できます。 String クラスの replace() メソッドには 2 つのタイプがあります。

Java ドキュメントの解釈: StringBuilder クラスの substring() メソッドの詳細な紹介 はじめに: Java プログラミングでは、文字列処理は最も一般的な操作の 1 つです。 Java には、文字列処理用の一連のクラスとメソッドが用意されており、その中で StringBuilder クラスは、頻繁に文字列を操作する場合によく使用される選択肢です。 StringBuilder クラスの substring() メソッドは、文字列の部分文字列をインターセプトするための非常に便利なメソッドです。この記事では、

皆さんこんにちは。今日は Java の基本知識である String についてお話します。 String クラスの重要性は言うまでもなく、バックエンド開発で最もよく使用されるクラスであるため、説明する必要があります。
