ホームページ Java &#&チュートリアル Java 8 で文字列を結合するために StringBuilder の詳細が不要になった

Java 8 で文字列を結合するために StringBuilder の詳細が不要になった

Mar 18, 2017 am 11:20 AM

Java 開発者の間では、文字列連結による高いリソース消費がよく話題になります。

それが多くのリソースを占有する理由について詳しく説明します。

Java では、文字列

オブジェクト は不変です。つまり、一度作成されると再度変更することはできません。したがって、文字列を連結すると、新しい文字列が作成され、古い文字列がガベージ コレクターによってマークされます。

何百万もの文字列を処理すると、ガベージ コレクターによって処理される何百万もの余分な文字列が生成されます。

基盤となる仮想マシンは、文字列を結合するときに多くの操作を実行します。文字列を連結するための最も直接的なドット演算子は、String#concat(String) 演算です。

public String concat(String str) {
    int otherLen = str.length();
    if (otherLen == 0) {
        return this;
    }
    int len = value.length;
    char buf[] = Arrays.copyOf(value, len + otherLen);
    str.getChars(buf, len);
    return new String(buf, true);
}
ログイン後にコピー
public static char[] copyOf(char[] original, int newLength) {
    char[] copy = new char[newLength];
    System.arraycopy(original, 0, copy, 0,
                     Math.min(original.length, newLength));
    return copy;
}
ログイン後にコピー
void getChars(char dst[], int dstBegin) {
    System.arraycopy(value, 0, dst, dstBegin, value.length);
}
ログイン後にコピー

文字配列が作成され、その長さは既存の文字と連結された文字の長さの合計になっていることがわかります。次に、それらの値が新しい文字配列にコピーされます。最後に、この文字配列から String オブジェクトを作成し、それを返します。

したがって、これらの演算は非常に多く、計算してみると、その複雑さは O(n^2) であることがわかります。

この問題を解決するには、StringBuilder クラスを使用します。可変の String クラスのようなものです。スプライシング方法は、不必要な重複を避けるのに役立ちます。複雑さは O(n) で、O(n^2) よりもはるかに優れています。

ただし、Java 8 では、デフォルトで StringBuilder を使用して文字列を連結します。

Java 8 の

ドキュメントの説明 :

文字列連結のパフォーマンスを向上させるために、Java コンパイラーは StringBuffer クラスまたは同様のテクノロジーを使用して、評価

を使用する際の中間 String オブジェクトの作成を減らすことができます。

Java コンパイラはこの状況を処理します:

public class StringConcatenateDemo {
  public static void main(String[] args) {
     String str = "Hello ";
     str += "world";
   }
}
ログイン後にコピー

上記のコードは次のバイトコードにコンパイルされます:

public class StringConcatenateDemo {
  public StringConcatenateDemo();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return
  public static void main(java.lang.String[]);
    Code:
       0: ldc           #2                  // String Hello
       2: astore_1
       3: new           #3                  // class java/lang/StringBuilder
       6: dup
       7: invokespecial #4                  // Method java/lang/StringBuilder."<init>":()V
      10: aload_1
      11: invokevirtual #5                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      14: ldc           #6                  // String world
      16: invokevirtual #5                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      19: invokevirtual #7                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      22: astore_1
      23: return
}
ログイン後にコピー

これらのバイトコードでは StringBuilder が使用されていることがわかります。したがって、Java 8 では StringBuilder クラスを使用する必要がなくなりました。

以上がJava 8 で文字列を結合するために StringBuilder の詳細が不要になったの詳細内容です。詳細については、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 8で1年前または1年後の日付を計算するにはどうすればよいですか? Java 8で1年前または1年後の日付を計算するにはどうすればよいですか? Apr 26, 2023 am 09:22 AM

Java8 は、minus() メソッドを使用して 1 年前の日付または 1 年後の日付を計算し、1 年前の日付を計算します。 packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo09{publicstaticvoidmain(String[ ]args ){LocalDatetoday=LocalDate.now();LocalDateprevious Year=today.minus(1,ChronoUni

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

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

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

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

Go言語で文字列を連結する方法 Go言語で文字列を連結する方法 Jan 12, 2023 pm 04:25 PM

文字列の結合方法: 1. 「+」記号を使用して結合します。構文は「str = str1 + str2」です。 2. fmt パッケージの sprintf() 関数を使用して結合します。構文は「str = fmt. Sprintf("%s%d% s", s1, i, s2)"; 3. join 関数を使用して結合します。 4. バッファ パッケージの WriteString() 関数を使用して結合します。 5. バッファ パッケージのビルダーを使用します。 () 結合する関数。

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.replace() 関数を使用して、指定された範囲の文字を置換します。 Java の StringBuilder.replace() 関数を使用して、指定された範囲の文字を置換します。 Jul 24, 2023 pm 06:12 PM

Java の StringBuilder.replace() 関数を使用して、指定した範囲の文字を置換します。Java では、StringBuilder クラスが replace() メソッドを提供し、これを使用して文字列内の指定した範囲の文字を置換できます。このメソッドの構文は次のとおりです。 publicStringBuilderreplace(intstart,intend,Stringstr) 上記のメソッドは、インデックス スターを置き換えるために使用されます。

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

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

Java で StringBuilder クラスの substring() 関数を使用して文字列の部分文字列をインターセプトする方法 Java で StringBuilder クラスの substring() 関数を使用して文字列の部分文字列をインターセプトする方法 Jul 24, 2023 pm 12:13 PM

Java は StringBuilder クラスの substring() 関数をどのように使用して文字列の部分文字列をインターセプトしますか? Java では、多くの場合、文字列操作を処理する必要があります。 Java の StringBuilder クラスは、文字列の操作を容易にする一連のメソッドを提供します。その中で、substring() 関数は文字列の部分文字列をインターセプトするために使用できます。 substring() 関数には 2 つのオーバーロード形式があります。

See all articles