目次
簡単な比較
例三
三. StringBuilder / StringBuffer 构造特性
四. String 与 StringBuilder 处理字符串拼接对比
例一:
例二:
例3
ホームページ Java &#&チュートリアル String、StringBuilder、StringBufferを理解する必要があります

String、StringBuilder、StringBufferを理解する必要があります

Jul 20, 2018 am 09:37 AM
string stringbuffer stringbuilder

String、StringBuilder、StringBuffer の 3 つのクラスの関係と違いは、Java では常に古典的な問題です

簡単な比較

  • 1. String: 文字定数。

  • StringBuilder: 文字変数

  • StringBuffer: 文字変数

String は定数型であり、すべてのプロパティも最終型として宣言されるため、String オブジェクトが作成されると、それを作成することはできません。変更されました;

StringBuilder / StringBuffer の 2 つのクラスは変数型であり、どちらも文字列の結合によって生成される中間オブジェクトが多すぎる問題を解決するために提供されたクラスです。 StringBuilder > 削除された StringBuffer にはスレッドセーフな部分があるため、オーバーヘッドが効果的に削減されます。したがって、ほとんどの場合、
StringBuilder が文字列の結合操作の最初の選択肢になります

  • 2. 文字列の文字列処理

    例 1:
  • String s = "abcd";
    s = s + "fgh";
    ログイン後にコピー
  • このような文字列処理を行うとき、多くの人が String 型が変数であると誤解します。

    しかし、実際には、JVM がこのコードを処理するプロセスは次のとおりです。まず s オブジェクトを作成し、値「abcd」を割り当てます。次に、コードの 2 行目を処理するときに、別の s オブジェクトを作成し、値「abcdfgh」を割り当てます。 " を追加し、最初のオブジェクト ガベージ コレクションを追加します。
  • つまり、最初の s は変更されず、2 番目の s は新しいオブジェクトであることと同等です

    例 2:
  • 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 = &quot;This is only a&quot;; String str3 = &quot;simple&quot;; String str4 = &quot;test&quot;; 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 = &quot;123&quot;; String str1 = str + &quot;456&quot;; String str2 = new StringBuilder().append(str).append(&quot;def&quot;).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";

🎜 🎜JDK 8🎜 では、String の文字列結合操作はコンパイラによって StringBuilder に自動的に変換され、追加されますこのような最適化スキームにより、この場合、2 つのクラスの処理効率にほとんど差はありません。🎜JDK 9🎜 では、文字列操作をより均一に最適化するために、統一された入り口として StringConcatFactory が提供されます。文字列の連結操作がさらに最適化されています。 🎜🎜例 2: 🎜rrreee🎜🎜この場合、StringBuilder の方が速いです🎜🎜🎜 ループ内では、「+」が実行されるたびに String オブジェクトが作成されるため、オブジェクトの作成とリサイクル。 🎜🎜簡単に言うと、🎜ループ🎜内で同じ文字列オブジェクトを連結する場合、StringBuilderの方が優先されます🎜

例3

rrreee🎜🎜この場合、Stringの方が高速です🎜🎜🎜us String str1 = "123" + "456" + "789"; は実際には String str1 = "123456789"; と同等ですが、StringBuilder では append メソッドを複数回呼び出す必要があります。 。 🎜

以上がString、StringBuilder、StringBufferを理解する必要がありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Java の String.valueOf() 関数を使用して基本データ型を文字列に変換する Java の String.valueOf() 関数を使用して基本データ型を文字列に変換する Jul 24, 2023 pm 07:55 PM

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

char配列を文字列に変換する方法 char配列を文字列に変換する方法 Jun 09, 2023 am 10:04 AM

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

stringbuilderをクリアする方法は何ですか? stringbuilderをクリアする方法は何ですか? Oct 12, 2023 pm 04:57 PM

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

Java の StringBuilder クラスの delete() メソッドを使用して、文字列内のコンテンツの一部を削除します。 Java の StringBuilder クラスの delete() メソッドを使用して、文字列内のコンテンツの一部を削除します。 Jul 26, 2023 pm 08:43 PM

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

Java で文字列を StringBuilder に変換する Java で文字列を StringBuilder に変換する Sep 02, 2023 pm 03:57 PM

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

Java の String.replace() 関数を使用して、文字列内の文字 (文字列) を置換します。 Java の String.replace() 関数を使用して、文字列内の文字 (文字列) を置換します。 Jul 25, 2023 pm 05:16 PM

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

Java ドキュメントの解釈: StringBuilder クラスの substring() メソッドの詳細な紹介 Java ドキュメントの解釈: StringBuilder クラスの substring() メソッドの詳細な紹介 Nov 03, 2023 pm 04:31 PM

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

2wワード詳細説明文字列、yyds 2wワード詳細説明文字列、yyds Aug 24, 2023 pm 03:56 PM

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

See all articles