検索
ホームページJava&#&チュートリアル文字列バッファと文字列ビルダーの違い

Java で作業している場合でも Android で作業している場合でも、この問題に遭遇することは避けられません。実際、通常、開発プロセス中にこの問題に苦労することはありません。この質問は面接で必須の古典的な質問です。今日はそれをまとめます。

文字列バッファと文字列ビルダーの違い

#StringBuffer と StringBuilder の違い

StringBuffer と StringBuilder のメソッドと関数は、次のメソッドを除いて完全に同等です。 StringBuffer それらのほとんどは synchronized キーワードで変更されているため、スレッドセーフであり、同時操作をサポートし、マルチスレッドでの使用に適しています。 StringBuilder は同時操作をサポートしておらず、直線的に安全ではなく、マルチスレッドでの使用には適していません。新しく導入された StringBuilder クラスはスレッドセーフではありませんが、単一スレッドでのパフォーマンスは StringBuffer よりも優れています。 (推奨学習:

JAVA ビデオ チュートリアル )

次に、一目でわかるテスト プロセスと結果のコードを直接貼り付けます:

public class StringTest {
 
	public static String BASEINFO = "Mr.Y";
	public static final int COUNT = 2000000;
 
	/**
	* 执行一项String赋值测试
	*/
	public static void doStringTest() {
 
		String str = new String(BASEINFO);
		long starttime = System.currentTimeMillis();
		for (int i = 0; i  mlist) {
		StringBuffer sb = new StringBuffer();
		long starttime = System.currentTimeMillis();
		for (String string : mlist) {
			sb.append(string);
		}
		long endtime = System.currentTimeMillis();
		System.out.println(sb.toString() + "buffer cost:"
				+ (endtime - starttime) + " millis");
	}
 
	/**
	* 测试StringBuilder迭代赋值结果
	* 
	* @param mlist
	*/
	public static void doStringBuilderListTest(List<string> mlist) {
		StringBuilder sb = new StringBuilder();
		long starttime = System.currentTimeMillis();
		for (Iterator<string> iterator = mlist.iterator(); iterator.hasNext();) {
			sb.append(iterator.next());
		}
 
		long endtime = System.currentTimeMillis();
		System.out.println(sb.toString() + "builder cost:"
				+ (endtime - starttime) + " millis");
	}
 
	public static void main(String[] args) {
		doStringTest();
		doStringBufferTest();
		doStringBuilderTest();
 
		List<string> list = new ArrayList<string>();
		list.add(" I ");
		list.add(" like ");
		list.add(" BeiJing ");
		list.add(" tian ");
		list.add(" an ");
		list.add(" men ");
		list.add(" . ");
 
		doStringBufferListTest(list);
		doStringBuilderListTest(list);
	}
 
}</string></string></string></string>

実行結果を見てください:

2711 millis has costed when used String.
211 millis has costed when used StringBuffer.
141 millis has costed when used StringBuilder.
 I  like  BeiJing  tian  an  men  . buffer cost:1 millis
 I  like  BeiJing  tian  an  men  . builder cost:0 millis
上記の結果からわかるように、マルチスレッドに関係なく、String オブジェクトを使用する場合 (Count/100 としました)、実行時間は他の 2 つよりも長く、StringBuffer オブジェクトを使用する場合と StringBuilder オブジェクトを使用する場合の違いも明らかです。プログラムがシングル スレッドで実行されている場合、またはスレッド同期の問題を考慮する必要がない場合は、StringBuilder クラスの使用を優先する必要があることがわかりますが、スレッドの安全性を確保したい場合は、当然 StringBuffer を使用します。

次のリストのテスト結果から、マルチスレッドのサポートの違いを除けば、これら 2 つのクラスの使用法と結果にはほとんど違いがないことがわかります。

JAVA 関連の技術記事の詳細については、

JAVA 開発チュートリアル 列にアクセスして学習してください。

以上が文字列バッファと文字列ビルダーの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
在Java中,我们如何比较StringBuilder和StringBuffer?在Java中,我们如何比较StringBuilder和StringBuffer?Aug 28, 2023 pm 03:57 PM

StringBuffer对象通常可以安全地在多线程环境中使用,其中多个线程可能会尝试访问同一个StringBuffer对象同时。StringBuilder是线程安全的StringBuffer类的替代品,它的工作速度要快得多,因为它没有同步>方法。如果我们在单个线程中执行大量字符串操作,则使用此类可以提高性能。示例publicclassCompareBuilderwithBufferTest{&nbsp;&nbsp;publicstaticvoidmain(String[]a

使用StringBuffer类的toString()方法将StringBuffer转换为字符串使用StringBuffer类的toString()方法将StringBuffer转换为字符串Jul 25, 2023 pm 06:45 PM

使用StringBuffer类的toString()方法将StringBuffer转换为字符串在Java中,StringBuffer类是用于处理可变字符串的类,它提供了许多方便的方法来修改和操作字符串。当我们需要将一个StringBuffer对象转换为字符串时,可以使用toString()方法来实现。StringBuffer类的toString()方法返回一

使用StringBuffer类的reverse()方法来反转字符串使用StringBuffer类的reverse()方法来反转字符串Jul 24, 2023 pm 04:41 PM

使用StringBuffer类的reverse()方法来反转字符串在编程中,我们经常需要对字符串进行一些操作,例如反转字符串。在Java中,可以使用StringBuffer类的reverse()方法来实现字符串反转。下面让我们一起来了解一下这个方法的使用。首先,我们需要创建一个StringBuffer对象,将要反转的字符串作为参数传递给它的构造函数,如下所示

如何在Java中使用String类、StringBuffer和StringBuilder?如何在Java中使用String类、StringBuffer和StringBuilder?Apr 21, 2023 pm 07:22 PM

String类基本概念String类属于引用数据类型,不属于基本数据类型。在Java中只要是""(双引号)中的,都是String对象。java中规定,双引号中的字符串是不可变的,也就是说"abc"自出生到死亡都不可能变成"abcd",也不能变成"ab"。在JDK中双引号括起来的字符串都是存储在方法区的字符串常量池当中的。(因为在实际开发中,字符串的使用频率十分高,为了执行效率,就把字符串放在了方法区中的字符串常量池当

Java中StringBuffer和StringBuilder怎么使用Java中StringBuffer和StringBuilder怎么使用Jun 02, 2023 pm 03:01 PM

当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类。和String类不同的是,StringBuffer和StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象。StringBuffer:在使用StringBuffer类时,每次都会对StringBuffer对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用StringBuffer。StringBuilder:StringBuilder类在Java5中被提出,它和S

使用StringBuffer类的insert()方法在Java中向字符串中插入内容使用StringBuffer类的insert()方法在Java中向字符串中插入内容Jul 24, 2023 am 11:34 AM

使用StringBuffer类的insert()方法在Java中向字符串中插入内容在Java编程中,StringBuffer类是一个非常常用的字符串操作类。它提供了多种方法来修改字符串,其中insert()方法是一种非常方便用于向字符串中插入内容的方法。insert()方法的作用是在指定的位置插入一个字符、一个字符数组、一个字符串或者其他数据类型转化的字符串

使用StringBuffer类的substring()方法获取字符串部分内容的子串使用StringBuffer类的substring()方法获取字符串部分内容的子串Jul 24, 2023 pm 12:41 PM

使用StringBuffer类的substring()方法获取字符串部分内容的子串在Java编程中,经常需要对字符串进行处理和操作。StringBuffer类是一个常用的字符串类,它提供了一系列方便的方法来操作字符串。其中,substring()方法是一个非常常用的方法,可以用来获取字符串中的一部分内容,即子串。下面将介绍如何使用StringBuffer类的

使用StringBuffer类的reverse()方法反转字符串中的字符顺序使用StringBuffer类的reverse()方法反转字符串中的字符顺序Jul 26, 2023 pm 10:10 PM

使用StringBuffer类的reverse()方法反转字符串中的字符顺序在Java中,有多种方法可以反转字符串中的字符顺序。其中一个简单而高效的方法是使用StringBuffer类的reverse()方法。本文将介绍如何使用这个方法来实现字符串反转,并提供相关的代码示例。StringBuffer类是Java中用于处理字符串的可变类。与String类不同,

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター